我有一个场景,我必须在12小时内格式化时间,如果时间进入PM
部分,那么我应该用PM
显示12小时格式的时间。
下面我已经实现了格式,但我无法找到如何使用当前解决方案提取12小时格式。
DECLARE @OpeningTime AS DATETIME
DECLARE @ClosingTime AS DATETIME
SET @OpeningTime = GETDATE()
SET @ClosingTime = '2015-12-29 13:52:36'
SELECT '<StoreTimings><Section><Days>'
+ LEFT(DATENAME(WEEKDAY, GETDATE()), 3)
+ '</Days><Timing>'
+ CONVERT(VARCHAR(5), @OpeningTime, 108)
+ ( CASE WHEN DATEPART(HOUR,@OpeningTime) > 12
THEN ' PM'
ELSE ' AM'
END ) + '-'
+ CONVERT(VARCHAR(5), @ClosingTime, 108)
+ ( CASE WHEN DATEPART(HOUR, @ClosingTime) > 12
THEN ' PM'
ELSE ' AM'
END ) + '</Timing></Section></StoreTimings>'
输出如下
<StoreTimings><Section><Days>Tue</Days><Timing>10:31 AM-13:52 PM</Timing></Section></StoreTimings>
我需要显示01:52 PM
而不是13:52 PM
答案 0 :(得分:1)
你可以这样做:
DECLARE @OpeningTime AS DATETIME
DECLARE @ClosingTime AS DATETIME
SET @OpeningTime = GETDATE()
SET @ClosingTime = '2015-12-29 13:52:36'
SELECT CONVERT(VARCHAR, @OpeningTime, 100)
SELECT CONVERT(VARCHAR, @ClosingTime, 100)
<强> FIDDLE DEMO 强>
同时检查MSDN list for CONVERT选项。
修改强>
在AM / PM和时间部分之间添加空格。你可以做到
select convert(varchar(10), @ClosingTime,120) + RIGHT(CONVERT(CHAR(20), @ClosingTime, 22), 11)
<强> FIDDLE DEMO 强>
修改强>
使用空格和HH:MM AM / PM格式获取AM / PM格式的日期
select convert(varchar(10), @ClosingTime,120) + ' ' + REPLACE(REPLACE(RIGHT('0'+LTRIM(RIGHT(CONVERT(varchar,getdate(),100),7)),7),'AM',' AM'),'PM',' PM')
<强> FIDDLE DEMO 强>
答案 1 :(得分:0)
我已按照脚本解决了我的问题。
DECLARE @OpeningTime AS DATETIME
DECLARE @ClosingTime AS DATETIME
SET @OpeningTime = '2015-12-30 00:30:36'
--GETDATE()
SET @ClosingTime = '2015-12-30 23:59:36'
DECLARE @StoreOpeningTime AS NVARCHAR(8)
DECLARE @StoreClosingTime AS NVARCHAR(8)
DECLARE @Hours AS INT
SET @Hours = 12
SELECT @StoreOpeningTime = CASE WHEN DATEPART(HOUR, @OpeningTime) >= 12
THEN RIGHT('0'
+ ( CONVERT(VARCHAR(2), DATEPART(HOUR,
@OpeningTime)
- @Hours) ), 2) + ':'
+ RIGHT('0'
+ ( CONVERT(VARCHAR(2), DATEPART(MINUTE,
@OpeningTime)) ),
2)
ELSE CONVERT(VARCHAR(5), @OpeningTime, 108)
END
+ ( CASE WHEN DATEPART(HOUR, @OpeningTime) >= 12 THEN ' PM'
ELSE ' AM'
END )
SELECT @StoreClosingTime = CASE WHEN DATEPART(HOUR, @ClosingTime) >= 12
THEN RIGHT('0'
+ ( CONVERT(VARCHAR(2), DATEPART(HOUR,
@ClosingTime)
- @Hours) ), 2) + ':'
+ RIGHT('0'
+ ( CONVERT(VARCHAR(2), DATEPART(MINUTE,
@ClosingTime)) ),
2)
ELSE CONVERT(VARCHAR(5), @ClosingTime, 108)
END
+ ( CASE WHEN DATEPART(HOUR, @ClosingTime) >= 12 THEN ' PM'
ELSE ' AM'
END )
SELECT '<StoreTimings><Section><Days>' + LEFT(DATENAME(WEEKDAY, GETDATE()), 3)
+ '</Days><Timing>' + @StoreOpeningTime + '-' + @StoreClosingTime
+ '</Timing></Section></StoreTimings>'
演示此链接FIDDLE DEMO