使用 DatePart(hour,Datetime) 提取“小时”后将小时转换为 12 小时格式

问题描述 投票:0回答:2

我的数据库中目前有一个日期时间字段。我已经在做的是从日期中提取小时、分钟和上午/下午部分,因为我必须将每个值填充到单独的字段中。

这就是查询的样子:

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
2个回答
1
投票

您可以使用模运算符。

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

1
投票

试试这个,

 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)
© www.soinside.com 2019 - 2024. All rights reserved.