在12小时格式SQL Server中转换DateTime

时间:2015-12-29 05:38:39

标签: sql-server datetime format

我有一个场景,我必须在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

2 个答案:

答案 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