【问题标题】:Calculate the SUM of the Column which has Time DataType:计算具有 Time DataType 的列的 SUM:
【发布时间】:2012-05-31 09:30:47
【问题描述】:

我想计算具有时间数据类型的字段的总和。

我的桌子在下面:

  TableA:

            TotalTime
          -------------
             12:18:00
             12:18:00

在这里,我想对两个时间字段求和。 我尝试了以下查询

   SELECT CAST(
              DATEADD(MS, SUM(DATEDIFF(MS, '00:00:00.000', 
                CONVERT(TIME, TotalTime))), '00:00:00.000'
               ) AS TOTALTIME) 
    FROM [TableA]

但它给出的输出为

            TOTALTIME
        -----------------
         00:36:00.0000000

但我想要的输出如下:

            TOTALTIME
        -----------------
            24:36:00

如何得到这个输出?

【问题讨论】:

    标签: sql sql-server-2008 select time sum


    【解决方案1】:

    您可以将总秒数相加,或datediff(second,0,datecolumn)。您可以通过一些数学将其格式化为时间字符串。例如,总分钟数为totalseconds / 60 % 60。例如:

    select  cast(sum(datediff(second,0,dt))/3600 as varchar(12)) + ':' + 
            right('0' + cast(sum(datediff(second,0,dt))/60%60 as varchar(2)),2) +
            ':' + right('0' + cast(sum(datediff(second,0,dt))%60 as varchar(2)),2)
    from    TestTable
    

    Working code at SQL Fiddle.

    【讨论】:

    • 它的工作,但问题是当添加时间 ('12:04:00'),('12:05:00') 它给出正确的 o/p 为“24:09 :00”。但是当我们添加 ('12:05:00'),('12:05:00') 时,它给出的 o/p 为“24:01:00”。这是因为如果我们在 Minutes 部分给出varchar(3),则显示为“24:010:00”。
    • 你说得对,我用来前缀0cast('0' + ... 不起作用。现在用right('0' + ... 修正答案。
    【解决方案2】:

    24:36 与 00:36(次日)相同

    【讨论】:

    • 是的。我能理解。但我需要将其显示为“24:36”。如何做到这一点?
    【解决方案3】:

    您的查询运行良好,结果正确,

    24:36 是第二天 00:36 的时间。

    您最多可以显示 24 小时。您没有使用任何一天,这就是为什么每 24 小时 = 第二天的 0 小时。

    只需更改列值,您就可以看到。

    【讨论】:

    • 是的。我能理解。但我需要将其显示为“24:36”。如何做到这一点?
    【解决方案4】:

    这会有点啰嗦,但是如果您想避免当天翻转但您可以将第二个 TIME 拆分为组成部分 datepart() 然后添加它们? (如果需要大于 24 的小时值,甚至显示为 varchar。

    【讨论】:

      【解决方案5】:

      试试这个。

      SELECT 
      CONVERT(VARCHAR(MAX),SUM(DATEPART(HH,CAST(YOUR_FIELD AS DATETIME)))+ 
      (SUM(DATEPART(MINUTE,CAST(YOUR_FIELD AS DATETIME)))/60) + 
      (SUM(DATEPART(MINUTE,CAST(YOUR_FIELD AS DATETIME)))%60 + 
      (SUM(DATEPART(SECOND,CAST(YOUR_FIELD AS DATETIME)))/60))/60) + ':' +
      RIGHT('00' + CONVERT(VARCHAR(MAX), 
      (SUM(DATEPART(MINUTE,CAST(YOUR_FIELD AS DATETIME)))%60+ 
      (SUM(DATEPART(SECOND,CAST(YOUR_FIELD AS DATETIME)))/60))%60),2) + ':' +   
      RIGHT('00' + CONVERT(VARCHAR(MAX),SUM(DATEPART(SECOND, 
          CAST(YOUR_FIELD AS DATETIME)))%60),2) AS YOUR_FIELD
      
      FROM YOUR_TABLE
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        • 1970-01-01
        • 2018-01-07
        • 2016-12-22
        • 1970-01-01
        • 2023-01-12
        • 2011-10-14
        相关资源
        最近更新 更多