2015-09-19 3 views
0

У меня есть таблица вроде этого:Mysql: получить час между выбранным временем

id | date | time from | time to
1 | 2015-09-19 | 20:00 | 04:00
2 | 2015-09-19 | 10:00 | 23:00
3 | 2015-09-19 | 22:00 | 10:00
4 | 2015-09-20 | 10:00 | 16:00

Для каждой строки, мне нужно час между 22:00 и 06:00

Затем первый ряд имеет 6, вторая строка имеет 1, третья строка имеет 8, четвертая строка ничего не имеет.

+0

Да, вы можете сделать это с помощью пользовательской функции или инлайн, если заявление. –

ответ

2

Да, это возможно. Просто используйте некоторую логику:

  • Если время меньше, чем время от затем просто использовать количество часов между полуночью и временем от, но не более 2-х часов, и добавить минимум от 6 часов (максимальный предел) и время.

  • во времени от меньше, чем время, чтобы затем

- если время от больше чем 6 добавить 0, то еще добавить время от

- если время меньше, чем 22 добавьте 0, иначе добавьте разницу между 24 и временем.

SELECT 
    *, 
    CASE 
    WHEN time_to < time_from 
    THEN 
     TIME_TO_SEC (
     LEAST(TIMEDIFF(TIME('24:00'), time_from), TIME('02:00')) + 
     LEAST(time_to, TIME('06:00')) 
    )/60/60 
    ELSE 
     TIME_TO_SEC (
     CASE WHEN time_from > TIME('06:00') THEN TIME('00:00') ELSE time_from END + 
     CASE WHEN time_to < TIME('22:00') THEN TIME('00:00') ELSE TIMEDIFF(TIME('24:00'), time_to) END 
    )/60/60 
    END new_time_to 
FROM demo; 

Вот пример: http://sqlfiddle.com/#!9/78571/36/0