2012-05-31 57 views
0

我想計算具有時間數據類型的字段總和。計算具有時間數據類型的列的總和:

我的表如下:

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 

如何得到這個輸出?

回答

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 

Working code at SQL Fiddle.

+0

它的工作,但問題是 當添加的時間('12:04:00 '),('12:05:00')它給出正確的o/p爲「24:09:00」。但是當我們添加('12:05:00'),('12:05:00' ),它給出了o/p爲「24:01:00」..這是因爲在分鐘部分,如果我們給varchar(3),那麼它顯示爲「24:010:00」。 – thevan

+0

你是對的,'cast'('0'+ ...'我曾用'0'加前綴不起作用,現在修正了'right'('0'+ ...'。 – Andomar

+0

是的。 ... – thevan

0

24:36是一樣的00:36(次日)

+0

是的,我可以理解,但我需要將它顯示爲「24:36」 。這個怎麼做? – thevan

0

您的查詢工作正常的結果是正確的,

24:36是第二天00:36的時間。

您最多可以顯示24小時。你沒有使用任何一天這就是爲什麼每隔24小時=第二天0小時。

只需更改列值,就可以看到。

+0

是的。我能夠了解。但我需要將其顯示爲「24:36」。這個怎麼做? – thevan

0

這將是一個有點時間長,但如果你想避免日輪轉,但你可以拆分第二個時間成爲組成datepart()的,然後添加這些? (甚至顯示爲VARCHAR,如果它是需要有一個小時值大於24

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