SQL Server - 总和时间显示问题

时间:2016-12-29 12:58:40

标签: sql sql-server

我在堆栈溢出时发现了以下公式,这有助于我总结时间值,稍微调整一下后效果很好:

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

2 个答案:

答案 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)