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