@Eugeny1987
Работаю с HostCMS

Поиск между двумя timestamp в MySQL?

В таблице есть 2 колонки типа TIME: start_time и end_time
Нужно чтобы нужное значение было между этими колонками

Такой запрос находит записи если start_time например, 00:30:00 и end_time 2:00:00:
SELECT * FROM tablename WHERE '01:00:00' BETWEEN start_time AND end_time

Но если start_time 23:00:00 и end_time 2:00:00, то не находит такие записи
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
А чего вы хотели? Для этого и делают датетайм, то есть налицо ошибка в проектировании структуры данных.
Единственное решение будет построить запрос разбив время на два интервала, то есть в логике определяете если диапазон прыгает через 0 и бьете на 2 интервала,
SELECT * 
FROM tablename 
WHERE 
('01:00:00' BETWEEN '23:00:00' AND '23:59:59') or 
('01:00:00' BETWEEN '00:00:00' AND '02:00:00')
Ответ написан
Комментировать
tsklab
@tsklab
Здесь отвечаю на вопросы.
Проблемы сделать интервал непрерывным нет:
CREATE TABLE Test ( start_time TIME, end_time TIME );
INSERT INTO Test VALUES ('00:30:00', '02:00:00'), ('23:00:00', '02:00:00'), ('23:00:00', '00:30:00');

SELECT *, TIME_TO_SEC('01:10:10') AS W, 
TIME_TO_SEC(CASE WHEN start_time > end_time THEN ( start_time - INTERVAL 24 HOUR ) ELSE start_time END) AS B,
TIME_TO_SEC(end_time) AS E
FROM Test

Как видите W попадает в интервал 1 и 2.
Вопрос в другом: как определить к каким суткам относится W и нужно ли TIME_TO_SEC('23:10:10') - 86400, что бы он попал в 2 и 3 интервал?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы