我在堆栈溢出时发现了以下公式,这有助于我总结时间值,稍微调整一下后效果很好:
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
正如您将注意到的,我的数据不包含秒数,所以我最后将其添加为字符串。它的分钟似乎是一个问题。
问题:
有没有办法调整上述论坛,以便我可以将总数显示为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
答案 0 :(得分:4)
您可以使用:
A
这将采用'000'和计算分钟串联的2个最右边的字符。因此,如果您的分钟数小于10,则会在前面添加RIGHT('000' + CAST (t.time_sum%3600/60 AS VARCHAR(2)), 2)
。导致0
- 01
。
我总是使用60
而不是我需要的东西,只是因为它没关系,而且我将永远安全。
答案 1 :(得分:1)
Right('0'+cast(yourvalue as varchar(2)),2)