select data from database between two dates (MySQL)

Выбрать данные из базы данных можно либо проверкой условия, например:

SELECT * FROM table WHERE DATE(date) >= '2021-11-01' AND DATE(date) <= '2021-11-30';

Но в MySQL есть для этого удобная функция, которая выглядит следующим образом:

SELECT * FROM table WHERE DATE(date) BETWEEN '2021-11-01' AND '2021-11-30';

Если например надо выбрать данные за определенное количество дней, ну например это может быть неделя. Потому что для месяцев это не совсем подойдет, так как в некоторых месяцах 30 дней, в других 31, а есть еще февраль, в котором количество дней меняется. Можно выбрать вот таким образом:

SELECT * FROM table WHERE DATE(date) BETWEEN '2021-11-01' AND DATE_ADD('2021-11-01', INTERVAL 7 DAY);

Но не все так плохо для месяцев, так как у MySQL есть возможность задать интервал в 1 месяц, и он сам посчитает сколько это должно быть.

SELECT * FROM table WHERE DATE(date) BETWEEN '2021-11-01' AND DATE_ADD('2021-11-01', INTERVAL 1 MONTH);

Если надо вернуться назад, от сегодняшнего дня, то значения надо просто поменять местами:

SELECT * FROM table WHERE DATE(date) BETWEEN DATE_ADD('2021-11-01', INTERVAL -1 MONTH) AND '2021-11-01';

Данная запись выведет все данные за последний месяц от 01.11.2021.

Но что если нам надо допустим за предыдущий месяц, но мы не знаем, какое число там последнее, 30 или 31 или вообще 28 🙂 тогда делаем следующий вариант:

SELECT * FROM table WHERE DATE(date) BETWEEN DATE_ADD('2021-11-01', INTERVAL -1 MONTH) AND DATE_ADD('2021-11-01', INTERVAL -1 DAY);

Т.е. месяц вперед 01.11.2021 — 1 день, даст нам дату окончания 30 или 31 число. У первого значения ставим -1 месяц. и получаем с 01.10.2021 по 31.10.2021

Оставьте комментарий