我想计算具有时间数据类型的字段的总和。
我的表在下面:
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
如何获得此输出?
答案 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
答案 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