получить данные между начальной и конечной датой

Получить данные между датой начала и датой окончания

Я получаю данные, но мое требование немного отличается, пожалуйста, проверьте приведенную ниже базу данных

У меня есть два текстовых поля

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

Спасибо

1

Решение

Вместо того, чтобы проверять, что значения столбцов находятся между вашими датами, вы хотите увидеть, находятся ли ваши даты между значениями столбцов. С помощью 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 убедитесь, что хотя бы одна из дат находится между столбцами.

1

Другие решения

Вы не хотели бы иметь 4 пункта, как у вас есть в вашем вопросе, вы хотели бы иметь только 2.
Логика должна быть следующей:

  1. дата начала из ввода в приложении позже или равна дате начала в столбце начала в вашей таблице
  2. дата окончания ввода в приложении раньше или равна дате окончания в столбце конца в вашем

приложение.

Основываясь на этой логике, вы должны иметь возможность использовать следующий запрос:

SELECT
*
FROM    purchase_order
WHERE   start_date<= '2017/09/01'  -- start date input
AND     end_date<= '2017/09/01'  -- end date input

Кто-то может жаловаться, что у меня есть дыра в моей логике из-за того, что я не проверяю, чтобы увидеть, что дата окончания более поздняя, ​​чем дата начала, хотя вы захотите сделать это на уровне приложения, поэтому это не так. актуально на уровне базы данных, где был задан этот вопрос.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector