使用 12 小时表示法格式化时间
Format time using 12 hour notation
我做了一个 SQL 查询,它显示日期和时间,时间分为小时和分钟。
select convert(varchar(10),[Date],23) as [Date],
datepart(hour, [Time])as Hour, datepart(minute, [Time])as Minutes,
FROM [SQLIOT].[dbo].[ZEPB_CaseLog]
table 以 24 小时格式显示小时。
但我想改用 12 小时格式,单个数字带有“0”前缀。
即:01、02、03 等
我想到了用case来做:
select convert(varchar(10),[Date],23) as [Date],
case when
datepart(hour, [Time])> 12 then (datepart(hour, [Time])- 12) as Hour
, datepart(minute, [Time])as Minutes,
FROM [SQLIOT].[dbo].[ZEPB_CaseLog]
这样做会给我一个语法错误
datepart(hour, [Time])> 12 then (datepart(hour, [Time])- 12) as Hour
--Incorrect syntax near the keyword 'as'.
我不太熟悉在 SQL 中做减法。我还应该添加什么来解决这个问题吗?
case when
上存在语法错误,请尝试以下操作。
select convert(varchar(10),[Date],23) as [Date]
, case when datepart(hour, [Time])> 12
then (datepart(hour, [Time])- 12)
else datepart(hour, [Time]) End as Hour
, datepart(minute, [Time])as Minutes,
FROM [SQLIOT].[dbo].[ZEPB_CaseLog]
鉴于您对格式化(即显示)感兴趣,那么让我们使用字符串。
declare @Time time = '09:33:44 pm'
select @Time [Original]
, format(cast(@Time as datetime),N'hh') [Format Hour] -- SQL Server 2012 + (format works differently for time and datetime - datetime is required here)
, case when len(convert(varchar(32),@Time,109)) > 17 then convert(varchar(2),@Time,109) else '0' + convert(varchar(1),@Time,109) end [Convert Hour] -- SQL Server pre-2012
-- If you ultimatly want the hours and minutes together then do it as one
, format(cast(@Time as datetime),N'hh\:mm') [Format hour:min] -- SQL Server 2012 + (format works differently for time and datetime - datetime is required here)
, case when len(convert(varchar(32),@Time,109)) > 17 then convert(varchar(5),@Time,109) else '0' + convert(varchar(4),@Time,109) end [Convert hour:min] -- SQL Server pre-2012
-- And if you want am/pm
, format(cast(@Time as datetime),N'hh\:mm tt') [Format hour:min tt] -- SQL Server 2012 + (format works differently for time and datetime - datetime is required here)
, case when len(convert(varchar(32),@Time,109)) > 17 then convert(varchar(5),@Time,109) else '0' + convert(varchar(4),@Time,109) end -- SQL Server pre-2012
+ case when @Time >= '12:00:00' then ' PM' else ' AM' end [Convert hour:min tt] -- SQL Server pre-2012
Returns:
Original Format Hour Convert Hour Format hour:min Convert hour:min Format hour:min tt Convert hour:min tt
21:33:44.0000000 09 09 09:33 09:33 09:33 PM 09:33 PM
如果您对 adding/subracting 日期感兴趣,请使用 dateadd
。
我做了一个 SQL 查询,它显示日期和时间,时间分为小时和分钟。
select convert(varchar(10),[Date],23) as [Date],
datepart(hour, [Time])as Hour, datepart(minute, [Time])as Minutes,
FROM [SQLIOT].[dbo].[ZEPB_CaseLog]
table 以 24 小时格式显示小时。 但我想改用 12 小时格式,单个数字带有“0”前缀。
即:01、02、03 等
我想到了用case来做:
select convert(varchar(10),[Date],23) as [Date],
case when
datepart(hour, [Time])> 12 then (datepart(hour, [Time])- 12) as Hour
, datepart(minute, [Time])as Minutes,
FROM [SQLIOT].[dbo].[ZEPB_CaseLog]
这样做会给我一个语法错误
datepart(hour, [Time])> 12 then (datepart(hour, [Time])- 12) as Hour
--Incorrect syntax near the keyword 'as'.
我不太熟悉在 SQL 中做减法。我还应该添加什么来解决这个问题吗?
case when
上存在语法错误,请尝试以下操作。
select convert(varchar(10),[Date],23) as [Date]
, case when datepart(hour, [Time])> 12
then (datepart(hour, [Time])- 12)
else datepart(hour, [Time]) End as Hour
, datepart(minute, [Time])as Minutes,
FROM [SQLIOT].[dbo].[ZEPB_CaseLog]
鉴于您对格式化(即显示)感兴趣,那么让我们使用字符串。
declare @Time time = '09:33:44 pm'
select @Time [Original]
, format(cast(@Time as datetime),N'hh') [Format Hour] -- SQL Server 2012 + (format works differently for time and datetime - datetime is required here)
, case when len(convert(varchar(32),@Time,109)) > 17 then convert(varchar(2),@Time,109) else '0' + convert(varchar(1),@Time,109) end [Convert Hour] -- SQL Server pre-2012
-- If you ultimatly want the hours and minutes together then do it as one
, format(cast(@Time as datetime),N'hh\:mm') [Format hour:min] -- SQL Server 2012 + (format works differently for time and datetime - datetime is required here)
, case when len(convert(varchar(32),@Time,109)) > 17 then convert(varchar(5),@Time,109) else '0' + convert(varchar(4),@Time,109) end [Convert hour:min] -- SQL Server pre-2012
-- And if you want am/pm
, format(cast(@Time as datetime),N'hh\:mm tt') [Format hour:min tt] -- SQL Server 2012 + (format works differently for time and datetime - datetime is required here)
, case when len(convert(varchar(32),@Time,109)) > 17 then convert(varchar(5),@Time,109) else '0' + convert(varchar(4),@Time,109) end -- SQL Server pre-2012
+ case when @Time >= '12:00:00' then ' PM' else ' AM' end [Convert hour:min tt] -- SQL Server pre-2012
Returns:
Original Format Hour Convert Hour Format hour:min Convert hour:min Format hour:min tt Convert hour:min tt
21:33:44.0000000 09 09 09:33 09:33 09:33 PM 09:33 PM
如果您对 adding/subracting 日期感兴趣,请使用 dateadd
。