2017-09-08 82 views
0

我目前正在尋找找到日期之間的時間差並輸出到小時(00:00)。然而,我然後總結這個計算,這意味着我不能轉換爲char/varchar。使用日期時間字段計算SQL日期之間的差異而不轉換爲字符/ varchar

請看下面的示例數據,我希望它出現。

EMPLOYEE_ID Start    End     Duration 
1   05/06/2015 08:30 05/06/2015 12:12 03:42 
1   05/06/2015 13:18 05/06/2015 17:00 03:42 
1   06/06/2015 08:30 06/06/2015 12:12 03:42 
1   06/06/2015 13:18 06/06/2015 17:00 03:42 

當前的時間代碼:

CONVERT(varchar(5),DATEADD(minute,DATEDIFF(minute,Start, End),0), 114) as Duration 

顯然,這個代碼是不是我怎麼想它,因爲它是varchar,而我想去上總結兩個持續時間在一起。我環顧四周,但找不到任何顯示如何完成的事情。

回答

2

計算在幾分鐘時間:

select datediff(minute, start, end) as duration_min 
. . . 

這是非常容易的工作。然後總結分鐘數:

select sum(datediff(minute, start, end)) as duration_min 

我會推薦讓它像這樣。但是如果你想以HH:MM格式,然後手動轉換爲你想要的格式的字符串。

請勿使用time數據類型。限於24小時。

1

SQL Server doesn't currently supoort the ANSI SQL INTERVAL data type因此,您可以做的最好的支持聚合的方法是使用一致的計量單位計算持續時間(如您在此使用的分鐘數),然後使用聚合結果計算固定日期時間值的時間間隔。雖然下面的示例使用FORMAT函數將結果轉換爲字符串,但我建議用於顯示目的的格式化在表示層而不是T-SQL中完成。

CREATE TABLE dbo.EmployTimeRecord (
     EMPLOYEE_ID int NOT NULL 
    , StartTime smalldatetime NOT NULL 
    , EndTime smalldatetime NOT NULL 
    , DurationMinutes AS DATEDIFF(minute, StartTime, EndTime) 
    ); 

INSERT INTO dbo.EmployTimeRecord(EMPLOYEE_ID, StartTime, EndTime) 
    VALUES 
     (1, '2015-05-06T08:30:00', '2015-05-06T12:12:00') 
    , (1, '2015-05-06T13:18:00', '2015-05-06T17:00:00') 
    , (1, '2015-05-06T08:30:00', '2015-05-06T12:12:00') 
    , (1, '2015-05-06T13:18:00', '2015-05-06T17:00:00'); 


SELECT 
     EMPLOYEE_ID 
    , FORMAT(DATEADD(minute, SUM(DurationMinutes), ''), 'HH:mm') AS Duration 
FROM dbo.EmployTimeRecord 
GROUP BY EMPLOYEE_ID; 
相關問題