|
我想计算具有时间数据类型的字段的总和。
2 S, F0 _& E- w3 `. \我的桌子在下面:2 M. S9 b2 m5 w; N, V
TableA:6 y( q* a; G/ F ~; R" j' S! k
TotalTime. U- b- ?+ B* e4 D9 H$ c8 Z$ i/ P
-------------
. s- i# ^8 J0 `# B c 12:18:00 a7 d$ |) j! i9 G4 J
12:18:00* r$ y a( \7 [5 H1 w
在这里,我想对两个时间字段求和。我尝试了以下查询
: [& D1 b9 K2 D9 x. c SELECT CAST(
. M- O. ~5 \7 P2 E P- I DATEADD(MS, SUM(DATEDIFF(MS, '00:00:00.000',
- Z) Q9 i2 `' S2 x# x1 O CONVERT(TIME, TotalTime))), '00:00:00.000'5 m" a0 t2 A# I) j
) AS TOTALTIME) # K5 Q( }! d5 C! d
FROM [TableA]
I% ]6 z* e) P( H6 D; V但是它给出的输出为! H( V# |) d6 @
TOTALTIME
3 \5 I7 A' Q1 H3 T# ] -----------------
0 L7 V6 H5 a+ w 00:36:00.0000000
, [% O% N: ?/ ? [, c$ d4 E* w但是我的期望输出将如下所示:
% c" g; P* |, [7 i/ }6 T) ~! ^; R TOTALTIME
/ s9 n7 y/ Q! f# r0 k -----------------
% M! I5 M1 f' V, v 24:36:00
2 c' K8 \9 Z9 V( L" j, v如何获得此输出?2 R0 C( y( H |5 r: Y
/ Y: p f, p% c% u: ?7 T$ ]解决方案:7 W" n6 W( b4 ^
# R4 f* C% N, S( R& y1 s; o" ~7 N
7 w7 h- j5 J# R |5 v5 Z( I4 [, q- q
您可以求和总计秒数,或datediff(second,0,datecolumn)。您可以使用一些数学将其格式化为时间字符串。例如,总分钟数为totalseconds/ 60 % 60。例如:( q, a. G5 L) g6 H0 P9 t9 N/ V
select cast(sum(datediff(second,0,dt))/3600 as varchar(12)) + ':' + ' ~& g3 X) }+ m! y3 U6 D0 A
right('0' + cast(sum(datediff(second,0,dt))/60%60 as varchar(2)),2) +
9 Y0 F+ |( A& M. V2 O ':' + right('0' + cast(sum(datediff(second,0,dt))%60 as varchar(2)),2): M7 I6 E8 n+ n0 O2 Z a# y
from TestTable) S+ \5 ]/ P8 }; ~ S9 e4 W- O* h
SQL Fiddle上的工作代码。 |
|