回答

收藏

计算具有Time数据类型的列的SUM:

技术问答 技术问答 232 人阅读 | 0 人回复 | 2023-09-13

我想计算具有时间数据类型的字段的总和。
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上的工作代码。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则