2010-05-03 139 views
0

我有一個查詢,我試圖讓兩個不同時間之間的持續時間(例如6.5小時)。時間差分計算日期和時間在單獨列

在我的數據庫中,時間和日期保存在不同的字段中,因此我可以高效地查詢startDate或endDate,因爲我從不按時查詢。

我的查詢看起來像這樣

 
SELECT COUNT(*), IFNULL(SUM(TIMEDIFF(endTime,startTime)),0) FROM events WHERE user=18 

有時一個事件會在一夜之間,所以時間差,需要考慮到的日期之間的差異也是如此。

我一直在試圖

 
SELECT COUNT(*), IFNULL(SUM(TIMEDIFF(CONCAT(endDate,' ',endTime),CONCAT(startDate,' ',startTime))),0) FROM events WHERE user=18 

當我做到這不幸的是我只得到錯誤,我似乎無法在兩個字段合併爲一個單一的時間戳。

回答

0

很確定你的問題是你的連接值被髮送到TIMEDIFF()作爲字符串而不是DATETIMEs。嘗試調用它們的DATETIME功能:

SELECT COUNT(*), IFNULL(SUM(TIMEDIFF(DATETIME(CONCAT(endDate,' ',endTime)),DATETIME(CONCAT(startDate,' ',startTime)))),0) FROM events WHERE user=18 

我沒有一個MySQL數據庫在我的測試是正面的,但我認爲,或者它的一些類似的形式是你在找什麼。有它的一個例子涉及MICROSECOND MySQL的文檔:

http://dev.mysql.com/doc/refman/5.0/en/datetime.html

編輯:嗯...看起來TIMEDIFF應該用繩子工作。無論如何值得嘗試。

-1
TIMEDIFF(endDate,startDate) + TIMEDIFF(endTime,startTime) 
+0

感謝詹姆斯,我最後不得不使用HOUR(TIMEDIFF(結束日期,的startDate)+ HOUR(TIMEDIFF(結束時間,開始時間),爲您介紹的方式,給了8000作爲代替8 – pedalpete 2010-05-03 17:30:17

+0

沒問題的迴應。你會失去小數部分,但我沒有安裝mySQL來測試,SUM(TIMEDIFF(endDate,startDate),TIMEDIFF(endTime,startTime))怎麼樣? – James 2010-05-04 08:13:59