2015-07-13 101 views
1

我有多個記錄作爲員工的workinghours作爲計算超過24小時,2008

02:10:00 
03:00:00 
12:00:00 
12:34:56 

現在我需要添加這些記錄,並希望在

`hh:mm:ss` 

格式顯示。我使用以下查詢,但它只適用於小於24小時的記錄總和,但記錄可能大於24小時。

SELECT CAST(DATEADD(MILLISECOND, 
       SUM(DATEDIFF(MILLISECOND, '00:00:00.000' 
     , CAST(WorkHrs AS TIME))), '00:00:00.000') AS TIME) AS Total_Time 
FROM tblAttend 

我花了4個多小時在谷歌找到解決方案,但沒有取得成功了。

workinghour列的數據類型是varchar。

+0

你能不能給一個WorkHrs記錄大於24小時的例子嗎? – Max

+0

首先,不要將日期/時間相關的信息存儲爲'VARCHAR'。嘗試使用'TIME'或'DATETIME'。 –

+0

@Max,對不起,由於我的網絡連接斷線,我遲到了。工作時間不超過24小時,但其總和將大於24小時。 – Waqas

回答

2

時間數據類型的顯式範圍最多隻有24小時(請參閱here)。

所以,我認爲你基本上堅持自己做轉換。這是醜陋的,但看起來是這樣的:

SELECT RIGHT('00' + CAST(SUM(DATEDIFF(MILLISECOND, '00:00:00.000', CAST(WorkHrs AS TIME))), '00:00:00.000')/(60*60) AS VARCHAR(255)), 2) 
      ) + 
     RIGHT('00' + CAST((SUM(DATEDIFF(MILLISECOND, '00:00:00.000', CAST(WorkHrs AS TIME))), '00:00:00.000')/60 % 60) AS VARCHAR(255)), 2) + 
     RIGHT('00' + CAST(SUM(DATEDIFF(MILLISECOND, '00:00:00.000', CAST(WorkHrs AS TIME))), '00:00:00.000') % 60 AS VARCHAR(255)), 2) 
      ) 
+0

什麼是合適的數據類型或方法來存儲這種信息以便於訪問?單個'秒'或'毫秒'列或4列'小時','分鐘','秒','毫秒'? –

+1

@RaduGheorghiu。 。 。我認爲一個整數存儲秒是我的首選數據類型。 –

+0

我認爲括號有誤 –

0

Merhaba Waqas,

可否請你嘗試下面的SQL CTE Select語句, 它返回小時值超過24以上,這種情況下,它是29我猜。 請檢查time calculation on SQL Server,這個選擇是從那裏

;with cte as (
select 
    userid, 
    total = sum( DATEPART(ss,period) + 60 * DATEPART(mi,period) + 3600 * DATEPART(hh,period)) 
from WorkingHours 
group by userid 
) 
select 
    userid, 
    total [Total Time in Seconds], 
    (total/3600) [Total Time Hour Part], 
    ((total % 3600)/60) [Total Time Minute Part], 
    (total % 60) [Total Time Second Part] 
from cte 

適應我希望它能幫助你

+0

由於互聯網連接斷開,很抱歉遲到的回覆。所以你的建議不起作用,並給我同樣的錯誤,超過24小時不被接受。 – Waqas