Sql server 将日期时间转换为12小时格式的SQL Server

Sql server 将日期时间转换为12小时格式的SQL Server,sql-server,datetime,format,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 '<

我有一个场景,在这个场景中,我必须将时间设置为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>'
将@OpeningTime声明为DATETIME
将@ClosingTime声明为日期时间
SET@OpeningTime=GETDATE()
设置@ClosingTime='2015-12-29 13:52:36'
选择“”
+左(DATENAME(工作日,GETDATE()),3)
+ ''
+转换(VARCHAR(5),@OpeningTime,108)
+(DATEPART(小时,@OpeningTime)>12时的情况)
然后是“下午”
其他“AM”
完)+'-'
+转换(VARCHAR(5),@ClosingTime,108)
+(DATEPART(小时,@ClosingTime)>12时的情况
然后是“下午”
其他“AM”
(完)
输出如下所示

<StoreTimings><Section><Days>Tue</Days><Timing>10:31 AM-13:52 PM</Timing></Section></StoreTimings>
Tue10:31 AM-13:52 PM

我需要显示
01:52 PM
而不是
13:52 PM

您可以这样做:

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)

同时选中该选项

编辑:

在AM/PM和时间部分之间添加空格。你能行

select convert(varchar(10), @ClosingTime,120) + RIGHT(CONVERT(CHAR(20), @ClosingTime, 22), 11)

编辑:

以AM/PM格式(带空格)和HH:MM AM/PM格式获取日期

select convert(varchar(10), @ClosingTime,120) + ' ' + REPLACE(REPLACE(RIGHT('0'+LTRIM(RIGHT(CONVERT(varchar,getdate(),100),7)),7),'AM',' AM'),'PM',' PM')

我已经通过以下脚本解决了我的问题

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>'
将@OpeningTime声明为DATETIME
将@ClosingTime声明为日期时间
SET@OpeningTime='2015-12-30 00:30:36'
--GETDATE()
设置@ClosingTime='2015-12-30 23:59:36'
将@StoreOpeningTime声明为NVARCHAR(8)
将@StoreClosingTime声明为NVARCHAR(8)
将@Hours声明为INT
设置@Hours=12
选择@StoreOpeningTime=DATEPART(小时,@OpeningTime)>=12时的大小写
然后右('0'
+转换(VARCHAR(2),日期部分(小时,
@开放时间)
-@Hours),2)+':'
+右('0'
+(转换为VARCHAR(2),日期部分(分钟,
@OpeningTime)),
2)
ELSE转换(VARCHAR(5),@OpeningTime,108)
结束
+(DATEPART(HOUR,@OpeningTime)>=12时,则为'PM'
其他“AM”
(完)
当DATEPART(小时,@ClosingTime)>=12时,选择@StoreClosingTime=CASE
然后右('0'
+转换(VARCHAR(2),日期部分(小时,
@关闭时间)
-@Hours),2)+':'
+右('0'
+(转换为VARCHAR(2),日期部分(分钟,
@关闭时间),
2)
ELSE转换(VARCHAR(5),@ClosingTime,108)
结束
+(如果DATEPART(小时,@ClosingTime)>=12,则为'PM'
其他“AM”
(完)
选择“”+左(日期名称(工作日,GETDATE()),3)
+'+@StoreOpeningTime+'-'+@StoreClosingTime
+ ''

您可以看到此链接上的演示。我在
13:52 PM
01:52 PM
之间有一个空格,这是手动添加的,我无论如何都需要添加。@DareDevil:-更新了我的答案。请检查@RahulTripathi-我相信您的答案是非常正确的,因为您的计算量非常少,而且很快就会完成。完整的逻辑是准备一个XML字符串,并且在Varchar中转换datetime值也不重要+1为您的想法和最佳解决方案。