我无法将计算的ss转换为hh:mm:ss的时间,即使它被格式化为时间。这是我的查询。在这附近有工作吗?
SELECT RIGHT('0' + CAST(263827 / 3600 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST((263827 / 60) % 60 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST(263827 % 60 AS VARCHAR),2) [Released]
我尝试使用CONVERT(time, DATEADD(ms, SUM(aa.Released) * 1000, 0))
,但未返回正确的输出。
编辑1:当前输出为73:17:07
,但是当我使用CONVERT
函数时,我无法将其转换为时间格式
从字符转换日期和/或时间时转换失败 字符串。
答案 0 :(得分:3)
如果我要将263827转换为小时分秒,我将使用dateadd
SELECT FORMAT(DATEADD(SECOND, 263827, '1970-01-01'), 'HH:mm:ss')
2012年之前版本的sqlserver没有格式:
SELECT CONVERT(VARCHAR, DATEADD(SECOND, 263827, '1970-01-01'), 8)
我没有特别的理由选择1970年1月1日,任何具有午夜时间的日期都可以使用,但是该日期是unix纪元,因此它可以用来转换unix时间(自1月1日起,INT64秒数) (1970年)更改为可用的DATETIME。
请注意,这种方法在86400秒钟内无法使用,因为它仅限于24小时才能延续到第二天。如果需要,您可以FORMAT添加“一年中的某天”持续时间达到“ 365d 23:59:59”。
要将几秒钟转换成几百个小时,可以用数学的方式做到这一点:
SELECT CONCAT(263827/3600, FORMAT(DATEADD(SECOND, 263827, '1970-01-01'), ':mm:ss'))
这是我无需考虑大量除法和mod操作(混乱)即可想到的最简单(最短的代码)方式
答案 1 :(得分:1)
时间数据类型的上限为23:59:59
,如果等于或小于varchar
,则可以将任何time
转换为23:59:59
。
在您的情况下,73:17:07
超出了time
数据类型的限制,因此您将获得转换错误。