2009-08-25 19 views
8

我有一個包含在這種格式的日期 - 時間值的表:MySQL - 如何SUM時間?

START

2009年1月13日上午七點00分00秒

END

1/13/2008 2:57:00 PM

我使用'str to date'函數將它們轉換爲日期時間格式。

我該如何計算它們之間的差異? 然後總結它,以便它顯示總小時數(即一週的總小時數爲40:53)。

我正在嘗試timediff函數,但結果不總和。

回答

4

試着看UNIX_TIMESTAMPSEC_TO_TIME

你會總結時間戳之間的差異,然後使用該值(會以毫秒爲單位)來獲取時間:

SELECT SEC_TO_TIME(time_milis/1000) 
FROM (
    SELECT SUM(UNIX_TIMESTAMP(date1) - UNIX_TIMESTAMP(date2)) as time_milis 
    FROM table 
) 
+0

謝謝 - 我將日期時間字符串轉換爲秒 - 計算差異 - 然後將秒數轉換回小時 - 分鐘。 – 2009-08-25 17:25:29

+0

更正 - time_to_sec函數不適用於日期部分 - 只有時間部分 - 所以採取2009-08-25 01:06:00減去2009-08-24 15:35:00結果爲負數。 我將需要使用timediff函數。 – 2009-08-25 17:57:38

6

退房的MySQL DateDiff Function

SELECT SUM(DATEDIFF(endtime, starttime)) 
FROM somerecordstable 
WHERE starttime > '[some date]' AND endtime <= '[some date]' 

您也可以嘗試:

SELECT SUM(TIMEDIFF(endtime, starttime)) 
FROM somerecordstable 
WHERE starttime > '[some date]' AND endtime <= '[some date]' 

我沒有測試過第二個,但我第一個知道應該工作。

+0

這是正確的想法,而且還會讓你在天一個答案。您需要進行一些乘法運算或使用其他日期函數將其轉換爲小時:分鐘 – 2009-08-25 16:53:56

+0

謝謝 - 它肯定需要幾小時,因爲查詢需要查找給定周內員工的總工作時間。 – 2009-08-25 17:22:47

+0

我給出的第二個例子應該給你正確的答案 – Jason 2009-08-25 17:29:30

1
SELECT some_grouping_column, SUM(TIMEDIFF(datecol1,datecol2)) as tot_time 
FROM my_table 
GROUP BY some_grouping_column; 
+0

結果是在幾分鐘內返回的嗎? – 2009-08-25 17:23:24

+0

它返回hh:mm:ss http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timediff – dnagirl 2009-08-25 17:58:31

40

我認爲你必須使用此代碼...它的工作原理:)

SELECT 
    SEC_TO_TIME(SUM(TIME_TO_SEC(`time`))) AS total_time 
FROM time_table; 
+0

當我在MySQL中完成這項工作時,我必須創建一個tmp表(帶有子查詢),因爲LIMIT不會起作用,否則:從選擇TIME_TO_SEC(TIMEDIFF(end_time,start_time))秒選擇sec_to_time(sum(secs))secs從預訂訂單通過ID desc limit 10)t;'奇怪。 – Rudie 2013-02-27 01:12:39