Mysql + сравнение дат - PullRequest
       6

Mysql + сравнение дат

0 голосов
/ 04 марта 2020

Я использую mysql в качестве базы данных для моего проекта. У меня есть следующая таблица:

tableA

start_date   end_date
2017-04-01   2017-04-31

Я получаю данные от пользователя как start и end

I хотите получить данные, которые больше >= начала и within конца. Я попытался следующий запрос

SELECT * FROM aaa WHERE (start_date >= '2017-04-01' AND end_date <= '2017-04-07');

Но он возвращает empty set, потому что 2017-04-31 не <= 2017-04-07. Поэтому я хочу вернуться, если введенная пользователем дата окончания также находится в диапазоне end_date.

Ответы [ 3 ]

0 голосов
/ 04 марта 2020

Ваш запрос не вернет никаких данных.

Это странно. Принимая во внимание, что в апреле 30 дней, это прекрасно работает для меня ...

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(start_date DATE NOT NULL
,end_date DATE NOT NULL
);

INSERT INTO my_table VALUES
('2017-04-01','2017-04-30');

SELECT * 
  FROM my_table 
 WHERE start_date <= '2017-04-07'
   AND end_date >= '2017-04-01' ;

+------------+------------+
| start_date | end_date   |
+------------+------------+
| 2017-04-01 | 2017-04-30 |
+------------+------------+
0 голосов
/ 04 марта 2020

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

Этот лог c:

WHERE start_date >= '2017-04-01' AND
      end_date <= '2017-04-07'

Ищет start_date / end_date пар, которые выпадают в первую неделю апреля.

Если вы хотите любое перекрытие, то вы хотите, чтобы start_date был до конца периода и end_date после начала:

WHERE start_date < '2017-04-07' AND
      end_date > '2017-04-01'

(Если вы включите конечные точки, то вы хотите, чтобы <= и >=.)

Если вы хотите, чтобы complete перекрывались, то начало - один или до первого апреля и конец наступает через неделю или позже:

WHERE start_date <= '2017-04-01' AND
      end_date >= '2017-04-07'
0 голосов
/ 04 марта 2020

Похоже, вы ищете выражение, которое проверяет совпадения диапазона дат. Рассмотрим:

where start_date <= '2017-04-07' and end_date >= '2017-04-01'
...