sqlite находит время между двумя временами проблема с полуночным временем

#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