首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从4位军事时间转换为标准时间

从4位军事时间转换为标准时间
EN

Stack Overflow用户
提问于 2015-11-19 20:12:55
回答 5查看 6.6K关注 0票数 1

我正在使用Server 2016,我正在尝试将军事时间转换为标准时间。军事时间是一个4位整数,我试图得到标准的时间格式(00:00 /pm)。

我运行了一个简单的CASE语句,使它成为标准,但没有':‘和'am/pm’。

代码语言:javascript
复制
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上午/下午‘

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-11-19 20:47:00

假设您的数据是作为整数存储的,并且假设没有无效的时间存储(即值大于2400或低于0),则可以使用以下方法:

代码语言:javascript
复制
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

对不起溶液的密度。我就是这样做的:

  1. 将@ to转换为varchar(4)
  2. 在前面添加一串零。
  3. 从这个新字符串中提取最右边的4个字符。
  4. 在这个新字符串的中间填充一个冒号
  5. 将字符串转换为日期时间。
  6. 转换回字符串,使用100作为样式指示符,以获得AM/PM
  7. 获得字符串的最多7个字符。

我相信有更优雅的方法,但这一个对我很好。

票数 1
EN

Stack Overflow用户

发布于 2015-11-19 20:18:39

您可以使用整数除法和模将其拆分为各个部分,将其转换为VARCHAR,然后将其转换为某个时间:

代码语言:javascript
复制
declare @x int = 109

select cast(cast(@x / 100 as varchar(2)) + ':' + cast(@x % 100 as varchar(2)) as time)

也可以使用新的TIMEFROMPARTS()函数( Server 2012+):

代码语言:javascript
复制
declare @x int = 109

select TIMEFROMPARTS(@x / 100,@x % 100, 0, 0, 0)

然后,您可以格式化它,无论您想要什么。

票数 4
EN

Stack Overflow用户

发布于 2017-07-04 14:55:24

我正在使用@BaconBits提供的解决方案,但是我不得不做一个调整,因为2400是一个有效的表示,但是它在代码中失败了。以下是经过调整的解决方案:

代码语言:javascript
复制
declare @x int = 2400
select TIMEFROMPARTS((@x / 100) % 24,@x % 100, 0, 0, 0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33813494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档