Как выбрать между / до / после дат в MySQL условно? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть таблица, и я хотел бы получить строки, которые будут соответствовать заданному условию c.

Скажем, у меня есть эта строка:

id start_date end_date
 3 2020-04-02 NULL

И в моем пользовательском интерфейсе веб-приложения У меня есть этот календарь:

enter image description here

Когда вы проверите поля таблицы, вы увидите start_date и end_date. end_date может быть нулевым, означая, что у него нет конца.

Возвращаясь к таблице, я хочу получить строки, передавая startDates и endDates из пользовательского интерфейса. startDate будет March 29 и endDate будет May 9 в зависимости от календаря.

Вот мой текущий запрос:

SELECT * FROM slots WHERE start_date <= 2020-03-29 AND (end_date >= 2020-05-09 OR end_date IS NULL)

С кодом выше я не получаю никаких данных. Это очевидно, потому что start_date в таблице 2020-04-02, и мой запрос проверяет предыдущую дату и равен startDate из пользовательского интерфейса.

Я также пытался (больше и равно):

SELECT * FROM slots WHERE start_date >= 2020-03-29 AND (end_date >= 2020-05-09 OR end_date IS NULL)

И пока я получаю строку, когда я нажимаю кнопку next в календаре и переключаюсь на май 2020 года, я больше не получаю строку. Я должен получить его, потому что end_date равно нулю.

Как мне получить строку с id 3 даже при смене месяцев в пользовательском интерфейсе?

1 Ответ

4 голосов
/ 09 апреля 2020

Вы пытаетесь найти записи, даты начала и окончания которых пересекаются с известным диапазоном. Это проблема перекрывающегося диапазона, и вы можете попробовать:

SELECT *
FROM slots
WHERE
    start_date < '2020-05-09' AND
    (end_date > '2020-03-29' OR end_date IS NULL);

Это говорит о том, что действительный диапазон начинается до даты окончания вашего известного диапазона, а заканчивается после даты начала вашего известного диапазона, т. Е. Он находится внутри этого известного диапазона.

Обратите внимание, что литералы даты в MySQL заключаются в одинарные кавычки, поэтому вам также необходимо исправить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...