|
我想计算具有时间数据类型的字段的总和。
8 [4 s% S0 Y( }- t! m! {* q% A我的桌子在下面:: L' I( r' r* z# ^, c) O$ I
TableA:
5 I# s" X" t' ]0 J- d: \' i$ P4 W TotalTime
+ H- S- |" g( B, w' r( s( z -------------
* D; Z- H+ Y5 R ^$ ] 12:18:00 M! v- e8 n# U+ [4 U
12:18:00
. x7 U7 ?1 O9 M7 c. O% I在这里,我想对两个时间字段求和。我尝试了以下查询
: R6 W; r' r* ^, s5 L8 @% c SELECT CAST() g. y$ M$ m0 D$ ]) M* s5 N
DATEADD(MS, SUM(DATEDIFF(MS, '00:00:00.000', - I- _, V" \* [# d5 Z) D) N
CONVERT(TIME, TotalTime))), '00:00:00.000'
% p+ R8 M3 m1 P# }; ]# A ) AS TOTALTIME)
$ s9 `# K9 ^- u% D, `. A FROM [TableA]8 G1 Z8 f3 e! b& ?6 C
但是它给出的输出为 ~. T% V3 W) T6 ?* q
TOTALTIME8 V8 R- |) w8 B/ a# \
-----------------
) q' h5 R4 s) ^# d 00:36:00.00000001 A2 K: \: i) [+ B+ ]
但是我的期望输出将如下所示:+ T" v0 d. l; v/ y
TOTALTIME( ^/ P3 l7 ` \' Q. {/ O
-----------------
( a2 q* ]8 m! u9 A5 p* B; X. h5 S 24:36:00
. p4 W& A" a, u7 G# S如何获得此输出?
6 v5 e" K/ x: G- g) }7 A$ ^
$ n* k! n6 a/ E8 B& Y$ \解决方案:
9 m4 n& S) Y7 c* a' c
* I9 D% [& ?7 D1 \; ~
5 q/ n2 O) l! L' V* Q
2 l m: q0 ~" @4 o+ R4 H1 \& Q 您可以求和总计秒数,或datediff(second,0,datecolumn)。您可以使用一些数学将其格式化为时间字符串。例如,总分钟数为totalseconds/ 60 % 60。例如:( s1 q8 g. |2 S/ F% i
select cast(sum(datediff(second,0,dt))/3600 as varchar(12)) + ':' +
5 q$ r' K) c5 F# y3 f right('0' + cast(sum(datediff(second,0,dt))/60%60 as varchar(2)),2) +
7 C* ]7 ~: u8 s7 k# U; P. K4 ]1 i8 T ':' + right('0' + cast(sum(datediff(second,0,dt))%60 as varchar(2)),2)
1 [/ _; w- P) u+ Y1 t; N p! |from TestTable
+ \+ \3 Y+ n) A0 O& e8 d1 w. S" QSQL Fiddle上的工作代码。 |
|