Получить данные между датой начала и датой окончания
Я получаю данные, но мое требование немного отличается, пожалуйста, проверьте приведенную ниже базу данных
У меня есть два текстовых поля
1) start date
2) end date
База данных такая
table name->purchase_order
sno start_date end_date
1 2017/08/01 2017/12/01
2 2017/08/01 2017/11/30
3 2017/09/01 2017/09/30
4 2017/09/01 2017/10/30
5 2017/10/01 2017/11/30
Я пытаюсь вот так
select *
from purchase_order
where start_date>= '2017/09/01' and start_date<= '2017/09/01'
OR end_date>= '2017/09/01' and end_date<= '2017/09/01'
Выход я получаю
sno start_date end_date
3 2017/09/01 2017/09/30
4 2017/09/01 2017/10/30
Что мне нужно
если я выбираю между этим 2017/09/01 — 2017/09/30, я хочу поставить так: {с идентификатором «1», между 8-м и 12-м месяцами, есть 9-й месяц, поэтому он также должен наступить}
sno start_date end_date
1 2017/08/01 2017/12/01
2 2017/08/01 2017/11/30
3 2017/09/01 2017/09/30
4 2017/09/01 2017/10/30
Спасибо
Вместо того, чтобы проверять, что значения столбцов находятся между вашими датами, вы хотите увидеть, находятся ли ваши даты между значениями столбцов. С помощью BETWEEN
заставляет логику выглядеть немного чище:
select * from purchase_order where '2017/09/01' BETWEEN start_date AND end_date
Если вы выберете 2017/09/01 - 2017/09/30
затем сделайте это:
select * from purchase_order where '2017/09/01' BETWEEN start_date AND end_date AND '2017/09/30' BETWEEN start_date AND end_date
AND
убедитесь, что обе даты находятся между start_date и end_date, OR
убедитесь, что хотя бы одна из дат находится между столбцами.
Вы не хотели бы иметь 4 пункта, как у вас есть в вашем вопросе, вы хотели бы иметь только 2.
Логика должна быть следующей:
приложение.
Основываясь на этой логике, вы должны иметь возможность использовать следующий запрос:
SELECT
*
FROM purchase_order
WHERE start_date<= '2017/09/01' -- start date input
AND end_date<= '2017/09/01' -- end date input
Кто-то может жаловаться, что у меня есть дыра в моей логике из-за того, что я не проверяю, чтобы увидеть, что дата окончания более поздняя, чем дата начала, хотя вы захотите сделать это на уровне приложения, поэтому это не так. актуально на уровне базы данных, где был задан этот вопрос.