Приветствую, господа! Появилась задачка, которую без проблем можно решить, если некоторые расчеты производить в php, но стало интересно организовать это всё в самом запросе.
Предположим, что смена сотрудника длится с 10-ти утра текущего до 10-ти утра следующего дня. Необходимо вытащить записи за текущую смену и естественно опираясь на текущее время ( что-то дофига слов "текущий" ). К примеру, если сейчас >= 10 часов, то выбрать в диапазоне от 10:00 текущего дня, до 10:00 завтрашнего. Если сейчас < 10 часов, то с 10:00 прошлого дня, до 10:00 текущего.
Повторюсь, что на php это решается достаточно просто и всего парой строк, но как по уму организовать эти условия и проверки в самом запросе? Пока дошёл до такого варианта, но что-то он мне не особо нравится:
CODE ( SQL):
скопировать код в буфер обмена
SELECT * FROM `some_table` WHERE `datetime_field` BETWEEN CASE WHEN HOUR( NOW( ) ) >= 10 THEN DATE_FORMAT(CURDATE(), '%Y-%m-%d 10:00') ELSE DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -1 DAY), '%Y-%m-%d 10:00') END AND CASE WHEN HOUR( NOW( ) ) >= 10 THEN DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d 10:00') ELSE DATE_FORMAT(CURDATE(), '%Y-%m-%d 10:00') END
(Отредактировано автором: 21 Июля, 2015 - 14:29:09)
|