#sqlite #datetime #time
#sqlite #datetime #время
Вопрос:
У меня есть два раза в таблице — время открытия и время закрытия.
Open_time. Selected time Close_time
06:00:00 09:23:46 23:45:00
09:00:00 09:23:46 00:00:00
09:00:00 09:23:46 23:00:00
09:00:00 09:23:46 23:00:00
06:00:00 09:23:46 23:45:00
06:00:00 09:23:46 04:00:00
06:00:00 09:23:46 02:00:00
Мне нужно выбрать только то время, которое между открытием и закрытием, но у моего выражения
есть некоторые проблемы.
SELECT open_from, close_at FROM restrnt WHERE (time('now', ' 10 hours') BETWEEN restaurants.open_from and restaurants.close_at)
06:00:00 23:45:00
09:00:00 23:00:00
09:00:00 23:00:00
06:00:00 23:45:00
Он выбирает только время до 00:00:00, но мне нужно, чтобы он нашел в этом фрагменте.
Комментарии:
1. Если бы ваши временные метки включали дату, это, вероятно, было бы намного проще.
2. Это отличная идея, но ей нравятся постоянные данные, которые не могут хранить дату.
Ответ №1:
SELECT time('now',' 5 hours') as nowTime, time(restaurants.open_from) as openTime, time(restaurants.close_at) as closeTime,
CASE
WHEN time(restaurants.open_from) > time(restaurants.close_at) THEN time('now',' 5 hours') >= time(restaurants.open_from) or time('now',' 5 hours') < time(restaurants.close_at)
when time(restaurants.open_from) < time(restaurants.close_at) THEN time('now',' 5 hours') >= time(restaurants.open_from) and time('now',' 5 hours') < time(restaurants.close_at)
END is_opened
from restaurants
WHERE is_opened >0
в моем случае это работает так, как мне нужно.
вывод
06:16:03 06:00:00 23:45:00 1
06:16:03 06:00:00 23:45:00 1
06:16:03 06:00:00 04:00:00 1
06:16:03 06:00:00 02:00:00 1