Выборка данных за последние дни в MySQL: функция NOW()
Быстрый ответ
Если вам нужно извлечь записи за последние несколько дней из MySQL, применяйте вычитание интервала из текущей даты с помощью функции CURDATE()
. Вот пример запроса:
SELECT * FROM ваша_таблица
WHERE столбец_даты >= CURDATE() – INTERVAL 3 DAY;
Этот запрос возвращает записи за последние три дня, включая сегодняшний. Замените число 3
на нужное количество дней.
Освоение функций даты и времени
При работе с временными данными крайне важно умело их анализировать. Изучим некоторые функции MySQL, которые помогут в работе с датой и временем.
Вариации интервалов
MySQL предоставляет возможность работать с различными временными интервалами – от секунд до дней:
-- Выборка за последние 24 часа
SELECT * FROM ваша_таблица
WHERE столбец_время >= NOW() – INTERVAL 1 DAY;
-- Выборка за последние 70 минут
SELECT * FROM ваша_таблица
WHERE столбец_время >= NOW() – INTERVAL 70 MINUTE;
Функция NOW()
возвращает текущую дату и время с точностью до секунд.
Вопросы часовых поясов
По умолчанию MySQL использует часовой пояс сервера, поэтому при работе с данными, распределенными по разным часовым поясам, требуется производить конвертацию:
-- Конвертация времени сервера в UTC
SELECT * FROM ваша_таблица
WHERE столбец_время >= CONVERT_TZ(NOW(), @@session.time_zone, '+00:00') – INTERVAL 3 DAY;
Точность с UNIX_TIMESTAMP
Применяйте UNIX_TIMESTAMP
для выборки данных без влияния изменения часовых поясов:
-- Выборка данных за последние 10800 секунд (3 часа)
SELECT * FROM ваша_таблица
WHERE UNIX_TIMESTAMP(столбец_время) >= UNIX_TIMESTAMP() – 10800;
Визуализация
Хорошей иллюстрацией выборки последних дат может служить пример с календарем:
SELECT * FROM события WHERE дата > CURRENT_DATE – INTERVAL 3 DAY;
Теперь в вашем отчете содержатся самые актуальные данные!
Продвинутые методы формирования запросов
Понимание и грамотное использование дат и времени при работе с MySQL значительно увеличивает эффективность запросов.
DATE_SUB для вычитания
Функция DATE_SUB
может быть использована для вычитания временного интервала из даты:
SELECT * FROM ваша_таблица
WHERE столбец_даты >= DATE_SUB(CURDATE(), INTERVAL 3 DAY);
Особенности работы с DATEDIFF
Функция DATEDIFF
вычисляет разницу между датами в днях, с пренебрежением времени:
-- Игнорирует точное время
SELECT * FROM ваша_таблица
WHERE DATEDIFF(CURDATE(), столбец_даты) <= 3;
Точность до микросекунд
Если требуется максимальная точность, используйте MICROSECOND
:
-- Выборка данных, включая миллисекунды
SELECT * FROM ваша_таблица
WHERE столбец_время >= (NOW(6) – INTERVAL 3 DAY);
Эффективные запросы к полям даты и времени
Не забывайте о правилах обращения с временем для улучшения своих запросов.
Тип данных TIMESTAMP
Столбцы типа TIMESTAMP
автоматически учитывают преобразование в UTC в MySQL:
SELECT * FROM ваша_таблица
WHERE столбец_время >= CURDATE() – INTERVAL 3 DAY;
Защита от некорректных дат
Вам необходимо проверять даты на валидность, чтобы избежать ошибок в данных:
SELECT * FROM ваша_таблица
WHERE столбец_даты >= CURDATE() – INTERVAL 3 DAY
AND столбец_даты <> '0000-00-00';
Использование индексов
Для ускорения работы с ваших запросов рекомендуется использовать индексы:
ALTER TABLE ваша_таблица ADD INDEX (столбец_даты);
Полезные материалы
- MySQL :: Руководство по MySQL 8.0 :: 14.7 Функции даты и времени — Подробное описание функций для работы с датами в MySQL.
- c++ – Как создается стек? – Stack Overflow — Обсуждение использования временных запросов в SQL.
- MySQL: Функция DATEDIFF — Информация о функции
DATEDIFF
с примерами использования. - SQL – Joins — Объяснение SQL JOINs с примерами работы с условиями по датам.