Да, это возможно. Просто используйте некоторую логику:
Если время меньше, чем время от затем просто использовать количество часов между полуночью и временем от, но не более 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
Да, вы можете сделать это с помощью пользовательской функции или инлайн, если заявление. –