Sql server 将日期时间转换为12小时格式的SQL Server
我有一个场景,在这个场景中,我必须将时间设置为12小时,如果时间输入到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 '<
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为您的想法和最佳解决方案。