Похоже, что речь идет о смене кладбища, которая начинается в один день в 22:30 и заканчивается на следующее утро в 6:30.Одним из вариантов может быть просто добавить еще одну логическую проверку смены кладбища:
SELECT shift_id, shift_name
FROM shift_master
WHERE
(end_time > start_time AND time BETWEEN start_time AND end_time) OR
(end_time < start_time AND (time > start_time OR time < end_time));
В этом запросе предполагается, что ваши time
входные данные имеют форму %H:%i%s
, например 12:30:05
.Поскольку в SQLite нет типов даты / времени, и они просто хранятся в виде текста, вы все равно будете выполнять сравнение текста, поэтому ваши входные данные должны совпадать с данными сдвига, которые вы задали в своем вопросе.
Логика здесьв том, что для смены, которая содержится в течение одного дня, критерием является то, что время должно попадать в эту смену.Для смены, которая приближается к следующему дню, время должно быть либо больше, чем начало смены , либо раньше, чем конец этой смены.