#mysql #sql #datetime #date-range
Вопрос:
У меня есть таблица с начальным и конечным полями со значениями, такими как:
start | end
2021-09-24 17:00:00 | 2021-10-01 08:00:00
У меня затуманилась голова, и я не могу понять, почему это утверждение ни к чему не приводит:
SELECT *
FROM `oncall`
WHERE `start` >= '2021-10-01 02:00:00'
AND `end` <= '2021-10-01 08:00:00'
хотя диапазон дат в строке моего примера содержит указанный выше диапазон.
Я пытаюсь найти любую строку, которая перекрывает начало и конец значений в базе данных.
Комментарии:
1. Каков тип данных столбцов
start
и.end
2. Те
DATE_FORMAT()
ничего не делают, немного похожеA = A
3. Оба столбца являются ДАТАМИ и ВРЕМЕНЕМ
4. Я знаю, что ФОРМИАТ ничего не делает, хватаясь за соломинку
5. Я бы пошел на
WHERE `start` >= '2021-10-01 02:00:00' AND `end` <= '2021-10-01 08:00:00'
Ответ №1:
Глядя на запись в вашей базе данных и запрос, который вы используете, кажется, что вы на самом деле ищете запрос на перекрытие интервала дат, т. Е. Запрос, который проверяет [2021-10-01 02:00:00, 2021-10-01 08:00:00)
, не перекрывается ли [2021-09-24 17:00:00, 2021-10-01 08:00:00)
каким-либо образом.
SELECT *
FROM `oncall`
WHERE @d2 > `start` AND `end` > @d1
-- replace @d1 and @d2 with actual values
Обратите внимание, что этот запрос работает для всех видов перекрытия. Например, если у вас есть эта пара дат в вашей базе данных:
2021-10-11 | 2021-10-15
тогда все эти входные пары будут совпадать:
2021-10-01 | 2021-10-12
2021-10-14 | 2021-10-20
2021-10-01 | 2021-10-20
2021-10-11 | 2021-10-14
Комментарии:
1. Спасибо тебе за это, просто не мог этого видеть.
2. Может быть, вы могли бы обновить вопрос так, чтобы он давал смутное представление о том, что это на самом деле то, чего вы хотели достичь