我正在使用Server 2016,我正在尝试将军事时间转换为标准时间。军事时间是一个4位整数,我试图得到标准的时间格式(00:00 /pm)。
我运行了一个简单的CASE语句,使它成为标准,但没有':‘和'am/pm’。
CASE
WHEN SA_BEGTIME between 0 and 1259 then SA_BEGTIME
WHEN SA_BEGTIME between 1300 and 2400 then SA_BEGTIME - 1200
ELSE ''
END as Time结果
如何将它转换成正确的格式:'00:00上午/下午‘
谢谢!
发布于 2015-11-19 20:47:00
假设您的数据是作为整数存储的,并且假设没有无效的时间存储(即值大于2400或低于0),则可以使用以下方法:
declare @TheTime int = 900
select right(convert(varchar(20),
cast(stuff(right('0000' + convert(varchar(4),@TheTime),4),3,0,':')
as datetime),100),7)
-------
9:00AM对不起溶液的密度。我就是这样做的:
我相信有更优雅的方法,但这一个对我很好。
发布于 2015-11-19 20:18:39
您可以使用整数除法和模将其拆分为各个部分,将其转换为VARCHAR,然后将其转换为某个时间:
declare @x int = 109
select cast(cast(@x / 100 as varchar(2)) + ':' + cast(@x % 100 as varchar(2)) as time)也可以使用新的TIMEFROMPARTS()函数( Server 2012+):
declare @x int = 109
select TIMEFROMPARTS(@x / 100,@x % 100, 0, 0, 0)然后,您可以格式化它,无论您想要什么。
发布于 2017-07-04 14:55:24
我正在使用@BaconBits提供的解决方案,但是我不得不做一个调整,因为2400是一个有效的表示,但是它在代码中失败了。以下是经过调整的解决方案:
declare @x int = 2400
select TIMEFROMPARTS((@x / 100) % 24,@x % 100, 0, 0, 0)https://stackoverflow.com/questions/33813494
复制相似问题