SQL Server-时间求和显示问题

3

我在stackoverflow上找到了以下公式,它帮助我计算时间值。经过微调后,它非常好用:

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如何将Time数据类型列中的时间相加

然而,我现在在格式方面遇到了问题。当我在我的数据上运行此查询时,它以这种格式返回时间总和: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 Data Center,在名为WorkingHours的varchar格式中存储数据。
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

你可以展示一下你的原始数据和期望输出吗? - TheGameiswar
1
有条不紊地进行。先分别获取小时、分钟和秒,然后将它们连接起来。 - Dan Bracuk
我的数据是来自于我的表格的原始数据,而期望的输出已经添加在下面。 - Crezzer7
@DanBracuk,谢谢您的建议,我会尝试一下。 - Crezzer7
时间值相加?这没有意义... 七点半加十一点差一刻是多少? - jarlh
基本上这是一个时间表应用程序,我一周有5天,我想在那一周内计算总时间。 - Crezzer7
2个回答

4

您可以使用:

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

这将获取“000”和计算出的分钟数连接后的最右2个字符。因此,如果您的分钟数小于10,则在前面添加0。结果为01 - 60。 我总是使用比我需要的更多的0,因为这不重要,而且我总是很安全。

1
@Crezzer7 记得也要在小时上做。 - Stephen

1
Right('0'+cast(yourvalue as varchar(2)),2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接