【问题标题】:Convert hour to 12 hr format after extracting 'hour' using DatePart(hour,Datetime)使用 DatePart(hour,Datetime) 提取“小时”后将小时转换为 12 小时格式
【发布时间】:2018-12-21 19:59:46
【问题描述】:

我有一个小问题正在尝试解决。我的数据库中目前有一个日期时间字段。我已经在做的是从日期中提取 HOUR、Minute 和 AM/PM 部分,因为我必须将每个值填充到单独的字段中。

这是查询的样子:

Select 'Hour'=(SELECT DATEPART(HOUR, Date1)), 
'Minute'=(SELECT DATEPART(MINUTE, Date1)), 
'PM'= (CASE WHEN DATEPART(HOUR, Date1) > 11 THEN 'PM' ELSE 'AM' END)
from tblA

所以在这里我可以拥有 3 个值。但是我遇到的问题是 HOUR 部分,默认情况下以 24 小时格式显示。有什么办法可以将其转换为 12 小时格式?

我知道我可以使用 format = 100 将时间转换为 12HR 格式,如下所示:

select convert(varchar(20),GetDate(),100)

但是,当我将其仅应用于“HOUR”值时,它不会改变格式。有没有其他方法可以做到这一点?

澄清一下,如果我表中的日期时间值是:2018-11-22 14:30:00.000 我希望得到如下所示的结果:

Hour      Minute       PM
2         30           PM

【问题讨论】:

    标签: sql sql-server datetime ssms-2012


    【解决方案1】:

    您可以使用模运算符。

    CASE
      WHEN DATEPART(HOUR, Date1) % 12 = 0 THEN
        12
      ELSE
        DATEPART(HOUR, Date1) % 12
    END
    

    【讨论】:

    • 有道理,我只是通过做一个 CASE WHEN DatePart(Hour,Date1) > 12 然后 DatePart(Hour,Date1) - 12 ELSE DatePart(Hour,Date1) END 来解决这个问题。你的更短
    【解决方案2】:

    试试这个,

     Declare
    
        @Date1 dateTime;
        Set @Date1 ='2018-11-22 14:30:00.000';
    
         Select 'Hour'= Case When (SELECT DATEPART(HOUR, @Date1)) >12 Then (SELECT DATEPART(HOUR, @Date1))-12 Else (SELECT DATEPART(HOUR, @Date1)) End, 
        'Minute'=(SELECT DATEPART(MINUTE, @Date1)), 
        'PM'= (CASE WHEN DATEPART(HOUR, @Date1) > 11 THEN 'PM' ELSE 'AM' END)
    

    【讨论】:

    • 谢谢。但请参阅我在第一个答案下的评论。
    猜你喜欢
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多