2013-10-03 62 views
2

這是我的表中的字段天時間Sumation公司

AtdId MCId AtdDate    CheckIn    CheckOut   Status 
    675 7 2013-10-03 2013-10-03 16:42:49.307   2013-10-03 16:43:10.317 0#0#56 
    676 7 2013-10-03 2013-10-03 16:46:28.730   2013-10-03 16:46:35.780 0#0#7 
    677 7 2013-10-03 2013-10-03 16:49:33.190  2013-10-03 16:49:35.140 0#0#2 
    678 7 2013-10-03 2013-10-03 16:49:36.913   2013-10-03 16:49:38.377 0#0#2 
    679 7 2013-10-03 2013-10-03 16:49:39.397  2013-10-03 16:49:40.023 0#0#1 
    680 7 2013-10-03 2013-10-03 16:49:41.043   2013-10-03 16:49:41.703 0#0#0 
    681 7 2013-10-03 2013-10-03 16:49:43.307   2013-10-03 16:49:45.063 0#0#2 
    682 7 2013-10-03 2013-10-03 16:50:33.657   2013-10-03 16:50:45.783 0#0#12 
    683 7 2013-10-03 2013-10-03 16:51:35.007   2013-10-03 16:52:42.877 0#1#7 

狀態字段0#0#0#小時分#秒。我如何總結每天的小時分鐘和秒鐘以顯示明智的日期總時間? 狀態是db中的varchar,我正在使用MSSQL。

+0

什麼是你正在使用的RDBMS?什麼是狀態字段的數據類型?您提供的樣本數據的期望結果是什麼? –

+0

請問,你能展示你迄今爲止的嘗試嗎?只是顯示投入並告訴「爲我做這項工作」並不是在這裏要問的問題。 – varocarbas

+0

詢問代碼的問題必須**對被解決的問題有最小的理解。**包括嘗試的解決方案,爲什麼他們不工作以及預期的結果。 – Kermit

回答

2

我仍然覺得從CheckIn和CheckOut列的SUM是一個更好的主意。但是,如果您想從狀態中獲取SUM,則可以採用以下方法之一。

WITH cte AS (
    SELECT 
    *, 
    PARSENAME(REPLACE(Status,'#','.'), 1) AS StatusSecond, 
    PARSENAME(REPLACE(Status,'#','.'),2) AS StatusMinute, 
    PARSENAME(REPLACE(Status,'#','.'),3) AS StatusHour 
    FROM tbl 
) 
SELECT [AtdDate], SUM(StatusHour*60*60 + StatusMinute * 60 + StatusSecond) AS TotalTimeInSecond 
FROM cte 
GROUP BY [AtdDate] 
ORDER BY [AtdDate] 

sql fiddle demo

編輯:

要過濾當前天/周/月,您可以添加在上面的查詢以下條件。

WHERE DATEDIFF(week,AtdDate,GETDATE()) = 0 
-- You can change week to Day or Month 

更多Deails,請參閱DATEDIFF

+0

謝謝EricZ,但我只想 – AyliyaJan

+1

添加「WHERE CAST(AtdDate AS DATE)= CAST(GETDATE()AS DATE)」 – EricZ

+0

感謝EricZeeEeEeEe ... :) – AyliyaJan