2014-03-12 27 views
0

我有一個關於MySQL日期/時間函數的問題。現在,我有查詢,看起來像這樣:在上午6點和晚上10點之後計算MySQL中的時間差異

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(sum))) 
FROM workingtime 
WHERE user='magdalena' 
AND type='work' 
AND start BETWEEN '2014-03-01' AND '2014-03-12' 
AND completed=1 

所以在我的數據庫中有2列時間戳,第一個是「開始」,第二個是「結束」。我想在單個查詢中執行的是這樣的:我想返回開始時間和上午6點之間的時間差+多少時間差在晚上10點和結束之間(選擇nex日期...)。我需要這個夜班小時 - 所以我需要結合夜班小時的總和。

實施例:

開始= 2014年2月26日3時三十分00秒

端= 2014年2月26日12點16分59秒

我想獲得開始之間差上午6點和晚上10點結束。 在這種情況下:3:30:00和6:00:00之間的差別是2:30:00。在這種情況下,晚上10點和結束點之間的區別不是什麼,因爲結束時間根本不會超過晚上10​​點。所以在這種情況下的結果將是2:50:00。這是我想得到的結果。

這隻能用MySQL嗎? 謝謝你們,我很感激。

回答

1

使用可以使用TIMEDIFF功能,像這樣:

select 
    CONCAT(HOUR(TIMEDIFF(starttime, CONCAT(DATE(starttime),' 06:00:00'))), ':', MINUTE(TIMEDIFF(starttime, CONCAT(DATE(starttime),' 06:00:00')))) AS startdiff, 
    CONCAT(HOUR(TIMEDIFF(CONCAT(DATE(endtime),' 22:00:00'), endtime)), ':', MINUTE(TIMEDIFF(CONCAT(DATE(endtime),' 22:00:00'), endtime))) AS enddiff 
from workingtime 

工作演示:http://sqlfiddle.com/#!2/fc621/1

我無法理解你的問題的以下部分:「與選項第二天」

+0

這正是我一直在尋找的。它效果很好。第二天的選擇是這樣的:如果在某些情況下,結束時間是「00:05」,那麼在午夜五分鐘後,enddiff必須是2:05小時,所以在同一天的2小時加上5分鐘。 –

相關問題