Выберите строки, которые находятся в диапазоне известного диапазона дат

#mysql

#mysql

Вопрос:

Я знаю это:

 $StartDate = '2019-05-01';
$EndDate = '2019-05-30';
  

В чем была бы моя ошибка, если бы я хотел выбрать строки, которые содержат мои $date в диапазоне RAT_DateStart и RAT_DateEnd ?

На самом деле у меня есть этот запрос?

 SELECT * FROM ___Rates 
WHERE (RAT_DateStart BETWEEN :StartDate AND :EndDate) 
    OR (RAT_DateEnd BETWEEN :StartDate AND :EndDate);
  

Моя таблица выглядит следующим образом:

 |--------|---------------|-------------|
| RAT_Id | RAT_DateStart | RAT_DateEnd |
|--------|---------------|-------------|
|      1 |    2019-04-10 |  2019-09-24 |
|      2 |    2019-02-03 |  2019-04-15 |
|--------|---------------|-------------|
  

Спасибо за вашу помощь.

Комментарии:

1. Вы хотите, чтобы обе даты ( $StartDate и $EndDate ) содержались в диапазоне, указанном RAT_DateStart и RAT_DateEnd ?

2. @Nick, на самом деле запрос не возвращает мне ни одной строки. Он должен вернуть мне первый, поскольку известный диапазон дат — это диапазон моей первой строки в таблице.

Ответ №1:

Возможно, решение Nick — это то, что вам нужно, но следующий запрос является более типичным…

 SELECT c.olumns
     , y.ou
     , a.ctually
     , w.ant
  FROM ___Rates
 WHERE :StartDate < RAT_DateEnd
   AND :EndDate   >= RAT_DateStart;
  

Ответ №2:

Если вы хотите, чтобы даты начала и окончания ( $StartDate и $EndDate ) содержались в диапазоне, указанном RAT_DateStart and RAT_DateEnd , тогда вам нужно реорганизовать ваше WHERE предложение:

 SELECT * FROM ___Rates 
WHERE (:StartDate BETWEEN RAT_DateStart AND RAT_DateEnd) 
  AND (:EndDate   BETWEEN RAT_DateStart AND RAT_DateEnd);
  

Вывод (для ваших выборочных данных):

 RAT_Id  RAT_DateStart       RAT_DateEnd
1       2019-04-10 00:00:00 2019-09-24 00:00:00
  

Демонстрация на dbfiddle