以天:小时:分钟:秒格式计算时差

时间:2020-02-26 09:02:50

标签: sql sql-server

我有一个查询:其中我必须以Days:Hours:min:sec格式计算时差

Declare @t table (ID int, starttime datetime,EndTime Datetime)

Insert into @t values (1,'2019-11-16 09:39:04.000','2019-11-16 13:43:40.000')
Insert into @t values (1,'2019-11-16 16:49:42.000','2019-11-18 18:02:58.000')

select convert(varchar(550),DateDiff(day, starttime, EndTime)%3600)+'D : '+convert(varchar(5),DateDiff(s, starttime, EndTime)/3600%24)+'H : '+convert(varchar(5),DateDiff     (s,starttime, EndTime)%3600/60)+'M : '+convert(varchar(5),(DateDiff(s, starttime, EndTime)%60)) +'S'   as Duration 
from @t

输出:

Duration
0D : 4H : 4M : 36S  
2D : 1H : 13M : 16S  

我的问题是,如何计算两行的总和?

我想要的输出是:

Duration  
2D : 5H : 17M : 52S

2 个答案:

答案 0 :(得分:4)

找到第二个并执行聚合的差异:

declare @seconds int

select @seconds = sum(datediff(second, starttime, EndTime))
from @t

select convert(varchar(255), (@seconds / 86400)) + 'D:' +
       convert(varchar(255), ((@seconds % 86400) /3600)) + 'H:'+
       convert(varchar(255), (((@seconds % 86400) % 3600) / 60)) + 'M:'+
       convert(varchar(255), (((@seconds % 86400) % 3600) % 60)) + 'S' as Duration  

答案 1 :(得分:0)

似乎可以汇总然后计算出值:

WITH Sums AS(
    SELECT ID,
           SUM(DATEDIFF(SECOND, starttime, EndTime)) Diff
    FROM @t
    GROUP BY ID) --Assumed GROUP BY
SELECT *,
       Diff%60 AS Seconds,
       Diff / 60 % 60 AS [Minutes],
       Diff / 60 / 60 % 24 AS Hours,
       Diff / 60 / 60 /  24 AS Days
FROM Sums;

我将其放在单独的列中,因为它可能更容易用于表示层