0

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

我的表如下:

  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

如何获得此输出?

4

5 回答 5

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

SQL Fiddle 的工作代码。

于 2012-05-31T10:09:12.573 回答
0

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

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

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

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

于 2012-05-31T10:24:02.107 回答
0

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

于 2012-05-31T10:37:08.690 回答
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
于 2014-08-27T22:21:19.907 回答
0

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

于 2012-05-31T10:10:56.277 回答