Проверка даты между двумя столбцами даты из двух дат mySQL - PullRequest
0 голосов
/ 14 марта 2019

Я хочу проверить, существует запись или нет.

Table1:

  S.No    StartDate         EndDate
 -------------------------------------
  1.      2019-10-15        2019-10-20
  2.      2019-10-10        2019-10-13
  3.      2019-10-21        2019-10-25

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

Дело 1: Если date_from: 2019-10-17 и date_to: 2019-10-19

Выход:

  S.No    StartDate         EndDate
 -------------------------------------
  1.      2019-10-15        2019-10-20

Дело 2: Если date_from: 2019-10-14 и date_to: 2019-10-21

Выход:

  S.No    StartDate         EndDate
 -------------------------------------
  1.      2019-10-15        2019-10-20
  3.      2019-10-21        2019-10-25

Дело 3: Если date_from: 2019-10-13 и date_to: 2019-10-16

Выход:

  S.No    StartDate         EndDate
 -------------------------------------
  1.      2019-10-15        2019-10-20
  2.      2019-10-10        2019-10-13

Дело 4: Если date_from: 2019-10-17 и date_to: 2019-10-20

Выход:

  S.No    StartDate         EndDate
 -------------------------------------
  1.      2019-10-15        2019-10-20

Дело 5: Если date_from: 2019-11-17 и date_to: 2019-11-20

Выход:

  *No records

Вот что я пробовал:

Query1:

SELECT * FROM Table1
WHERE StartDate BETWEEN **date_from** AND **date_to**
OR EndDate BETWEEN **date_from** AND **date_to**

Query2:

SELECT * FROM Table1
WHERE **date_from** BETWEEN StartDate AND EndDate 
OR **date_to** BETWEEN StartDate AND EndDate

Я уже пробовал следующие решения:

Проверка двух дат не было между двумя другими датами + MYSQl

проверить, существует ли указанная дата между двумя столбцами даты в mysql

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Это проблема перекрывающегося диапазона дат.Вот запрос для вашего первого сценария, где вы хотите найти совпадающие записи между 2019-10-17 и 2019-10-19:

SELECT *
FROM yourTable
WHERE EndDate >= '2019-10-17' AND StartDate <= '2019-10-19';

В более общем случае:

SELECT *
FROM yourTable
WHERE EndDate >= <date_from> AND StartDate <= <date_to>;

Если вы хотитевключите, скажем, два диапазона дат в один запрос, тогда вы можете просто развернуть предложение WHERE:

SELECT *
FROM yourTable
WHERE
    (EndDate >= '2019-10-13' AND StartDate <= '2019-10-16') OR
    (EndDate >= '2019-10-17' AND StartDate <= '2019-10-19');
0 голосов
/ 14 марта 2019

Это решение работало для меня во всех вышеупомянутых случаях

SELECT * FROM Table1
WHERE ( StartDate <= 'date_from' and EndDate >= 'date_from' )
OR ( 'date_from' <= StartDate and 'date_to' >= StartDate )
OR ( StartDate < 'date_to' and EndDate >= 'date_to' )

Ссылка:

SQL-запрос для поиска доступности номеров

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