Вычисление разницы во времени до 6 утра и после 10 вечера в MySQL

У меня есть один вопрос относительно функций даты/времени 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 столбца с отметками времени, первый — «начало», второй — «конец». Что я хотел бы выполнить в запросе sigle, так это: я хотел бы вернуть, сколько разница во времени между началом и 6 утра + сколько разница во времени между 22:00 и концом (с опцией на следующий день...). Мне нужно это для часов ночной смены, поэтому в результате мне нужна сумма часов ночной смены.

Пример:

начало = 2014-02-26 03:30:00

конец = 2014-02-26 12:16:59

Я хотел бы получить разницу между началом и 6 утра и 10 вечера и концом. В этом случае: разница между 3:30:00 и 6:00:00 составляет 2:30:00. Разница между 22:00 и концом в этом случае не имеет значения, потому что время окончания вообще не превышает 22:00. Таким образом, результат в этом случае будет 2:50:00. Это результат, который я хотел бы получить.

Это возможно только с MySQL? Спасибо, ребята, я ценю это.


person marc_s    schedule 12.03.2014    source источник


Ответы (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

Я не смог понять следующую часть вашего вопроса: "с опцией на следующий день"

person Aziz Shaikh    schedule 12.03.2014
comment
Это именно то, что я искал. Это прекрасно работает. Вариант для следующего дня будет таким: если в каком-то случае время окончания 00:05, то есть через пять минут после полуночи, enddiff должно быть 2:05 часа, то есть 2 часа в тот же день плюс эти 5 минут. - person marc_s; 13.03.2014