计算具有Time DataType的列的SUM:

时间:2012-05-31 09:30:47

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

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

我的表在下面:

  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

如何获得此输出?

5 个答案:

答案 0 :(得分:5)

您可以总计总秒数,或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.

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您的查询工作正常,结果是正确的,

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

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

只需更改列值即可看到。

答案 3 :(得分:0)

这有点长,但是如果你想避免当天翻转,但你可以将第二个TIME分成成分datepart(),然后加上那些? (如果必须使小时值大于24,则显示为varchar。

答案 4 :(得分:0)

尝试这个。

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