【问题标题】:SQL Server - Sum time display issueSQL Server - 总和时间显示问题
【发布时间】:2016-12-29 12:58:40
【问题描述】:

我发现了以下关于堆栈溢出的公式,它帮助我总结了时间值,稍微调整后效果很好:

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 Data Center,并将数据以 HH:MM 格式的 varchar 形式存储在我的表中,称为 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

【问题讨论】:

  • 你能展示你的原始数据和预期输出吗
  • 有条不紊。分别获取小时、分钟和秒,然后将它们连接起来。
  • 我的数据是我表中的原始数据,下面已经添加了预期的输出
  • @DanBracuk 谢谢你的建议,我试试看
  • 求和时间值?这毫无意义……七点半加上十一点一刻是多少?

标签: sql sql-server


【解决方案1】:

你可以使用:

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

这将采用“000”连接的最右边的 2 个字符和计算的分钟数。因此,如果您的分钟数少于 10,则会在前面添加 0。导致01 - 60。 我总是使用比我需要的更多的0,只是因为这并不重要,而且我永远是安全的。

【讨论】:

  • @Crezzer7 记得也要在几个小时内完成。
【解决方案2】:
Right('0'+cast(yourvalue as varchar(2)),2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多