SQL无法将时间转换为HS:MM:SS计算的时间格式

时间:2019-01-23 06:45:19

标签: sql sql-server

我无法将计算的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函数时,我无法将其转换为时间格式

  

从字符转换日期和/或时间时转换失败   字符串。

2 个答案:

答案 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数据类型的限制,因此您将获得转换错误。