我在堆栈溢出中发现以下公式,该公式有助于我总结时间值,在对其进行一些微调之后,它的工作原理非常出色:

SELECT CAST(t.TotalHours/3600 AS VARCHAR(2)) + ':'
     + CAST(t.TotalHours%3600/60 AS VARCHAR(2)) + ':00'
FROM ( SELECT SUM(DATEDIFF(S, '00:00', WorkingHours)) AS TotalHours
       FROM workhour) t


来自SQL How to sum times from Time datatype columns in hh:mm:ss

但是我现在在格式化方面遇到问题。当我对数据运行此查询时,它将以以下格式返回时间总和:HH:M:SS (32:0:00)

我的资料:

WorkingHours
   05:30
   06:00
   05:30
   08:00
   07:00


预期产量:

  TotalHours
   32:00:00


您会注意到,我的数据不包含秒,因此我在结尾处将其添加为字符串。它的记录似乎正在引起我的问​​题。

题:
有没有办法调整上面的forumla,以便我可以将总计显示为HH:MM:SS -> 32:00:00

注意:当分钟字段返回0或值小于10时,会发生这种情况。

谢谢您的帮助。我正在使用SQL Server 2016数据中心,并将数据作为varchar以HH:MM格式存储在我的表中,称为WorkingHours。

工作答案:

SELECT CAST(t.TotalHours/3600 AS VARCHAR(2)) + ':' +
     RIGHT('000' + CAST (t.TotalHours%3600/60 AS VARCHAR(2)), 2) + ':00'
FROM ( SELECT SUM(DATEDIFF(S, '00:00', TotalHours)) AS TotalHours
       FROM workhour) t

最佳答案

您可以使用:

RIGHT('000' + CAST (t.time_sum%3600/60 AS VARCHAR(2)), 2)


这将采用“ 000”的串联的最右边的2个字符和计算的分钟。因此,如果您的分钟数少于10分钟,则会在前面添加0。结果为01-60
我总是使用比我需要的0更多的东西,只是因为这无关紧要,而且我将永远安全。

关于sql - SQL Server-总和时间显示问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41380246/

10-16 14:55
查看更多