2015-01-26 26 views
0

我有一個包含4列(TIME(0)數據類型)的SQL Server表。SQL如何累計時間數據類型列中的時間hh:mm:ss

每行對應一個日子,所以我有:

Col Time 1 -------- Col Time 2 ------ Col Time 3 

'03:23:12' -------- '21:33:04' ------ '07:44:11' 
'21:14:45' -------- '12:43:44' ------ '01:56:43' 
'15:22:36' -------- '19:33:55' ------ '04:03:11' 
'08:21:46' -------- '01:23:14' ------ '06:09:11' 

我想SUM每一列,所以我可以得到總小時,分鐘和秒hh:mm:ss)。

所以例如用於Col Time 1我應該有:

48:54:46 
+1

也許你應該考慮重構數據庫,我不相信這是非常好的設計... – 2015-01-26 23:26:02

+0

你沒有存儲'時間',你顯然正在存儲一個持續時間。你應該爲此使用'interval'數據類型。如果SQL Server支持(不確定)。如果不是,你應該將持續時間存儲爲一個表示以秒爲單位的持續時間的單個值,而不是持續時間不是「時間」。 – 2015-01-29 22:28:54

回答

2

起初,你的最終值應爲48:22:19,而不是48:54:46
其次,則不能使用TIME類型來接收所需的結果,因爲對於hh元件範圍爲兩位數字,從023,表示小時(More information

又來了一個解決辦法,如果你一開始SUMTIME列轉換在每個值,然後找到單獨小時,分鐘和秒

SELECT CAST(t.time_sum/3600 AS VARCHAR(2)) + ':' 
    + CAST(t.time_sum%3600/60 AS VARCHAR(2)) + ':' 
    + CAST(((t.time_sum%3600)%60) AS VARCHAR(2)) 
FROM (SELECT SUM(DATEDIFF(S, '00:00:00', col1)) AS time_sum 
     FROM tbl) t 

SQLFiddle

相關問題