О web-разработке
и даже немного больше...

Фильтрация по полю DateTime в MySQL

Хранение данных в базе MySQL довольно часто сопряжено с полями, которые хранят значения времени и временные метки. Для этих целей в MySQL существуют несколько форматов даты и времени которые могут храниться в полях таблиц.

Давайте перечислим основные поля, используемые для хранения значений времени:

DATE – тип поля который хранит дату в формате ГГГГ-ММ-ДД;
DATETIME – поле этого типа хранит дату и время, в формате ГГГГ-ММ-ДД ЧЧ:ММ:CC;
TIMESTAMP – временная метка, формат хранения зависит от версии MySQL, и режима работы сервера баз данных.

Как правило, TIMESTAMP представляет некоторое числовое значение, которое удобно использовать при фильтрации полей, традиционными операторами сравнения. Что касается формата DATETIME, то здесь уже операция фильтрации выполняется немного иначе. Давайте рассмотрим простые примеры, как можно фильтровать записи, если у вас таблица хранит данные времени в формате DATETIME.

Фильтрация по дате в формате DateTime

В качестве задачи, мы рассмотрим пример выборки записей, до определённой даты, пусть это будет 24.05.2020. Для этого чтобы применить фильтрацию к полю DateTime мы воспользуемся функцией DATE():

SELECT * FROM m_table WHERE DATE(add_date) < '2020-05-24'

Данный запрос сделает выборку данных из таблицы m_table, выбирая записи, у которых значение даты в поле add_date не превышает указанное в условии. Либо аналогичным образом можно отфильтровать записи, у которых значение поле add_date больше указанной даты:

SELECT * FROM m_table WHERE DATE(add_date) > '2020-05-24'

Как вы можете заметить, поменялся только лишь оператор сравнения.

Фильтрация по диапазону значений DateTime

Теперь давайте рассмотрим пример с фильтрацией по диапазону. Для фильтрации мы будем использовать начальную и конечную дату. Таким образом, мы сделаем выборку записей из таблицы, соответствующие заданному диапазону:

SELECT * FROM m_table
WHERE DATE(add_date) BETWEEN '2020-04-01' AND '2020-05-01'

Команда BETWEEN в запросе как раз указывает на то, что в условии будет использоваться диапазон значений.

Фильтрация по диапазону значений DateTime с временными интервалами

Нередко приходится выбирать данные с использованием интервалов времени, которые могут меняться динамически. Так к примеру, мы можем выбрать записи двухнедельной давности, а также записей, дата которых больше текущей на некоторое значение.

SELECT * FROM m_table
WHERE DATE(add_date) BETWEEN DATE(CURRENT_DATE() - INTERVAL 2 WEEK) AND 
DATE(CURRENT_DATE() + INTERVAL 4 DAY)

Опять же, здесь задействованы такие функции как DATE(), CURRENT_DATE(), а как же команды временного интервала INTERVAL. MySQL позволяет выполнять математические операции с датами, оперируя вместе с этими функциями. Так можно увеличивать или уменьшать некоторые временные значения в запросе, динамически, в зависимости от текущего значения времени.

Функции для работы с датой и временем в MySQL

В таблицы приведён список функций, которые могут быть использованы в запросах MySQL. Этих часть этих функций бывает достаточно чтобы сформировать запросы практически с любым условием выборки данных.

Функция Описание
ADDDATE() Добавление даты
ADDTIME() Добавление времени
CONVERT_TZ() Конвертация из одной временной зоны в другую
CURDATE() Получение текущей даты
CURTIME() Получение текущего системного времени
DATE_ADD() Добавление одной даты к другой
MySQL DATE_FORMAT() Приведение даты к определённому формату
DATE() Получение даты из даты или выражения дата-время
DATEDIFF() Вычитание одной даты из другой
DAYNAME() Получение названия дня недели
DAYOFMONTH() Получения дня месяца (1-31)
DAYOFWEEK() Получение индекса дня недели из аргумента
DAYOFYEAR() Получение дня года (1-366)
EXTRACT Получение части даты
FROM_DAYS() Преобразование номер дня в дату
FROM_UNIXTIME() Преобразование даты в формате UNIX в дату
MySQL DATE_SUB() Вычитание одной даты из другой
HOUR() Получение часа
LAST_DAY Получение последнего дня месяца для аргумента
MAKEDATE() Создание даты из года и дня года
MAKETIME () Получение значения времени
MICROSECOND() Получение миллисекунды из аргумента
MINUTE() Получение минуты из аргумента
MONTH() Получение месяца из переданной даты
MONTHNAME() Получение названия месяца
NOW() Получение текущей даты и времени
PERIOD_ADD() Добавление интервала к месяцу-году
PERIOD_DIFF() Получение количества месяцев между двумя периодами
QUARTER() Получение четверти часа из переданной даты в качестве аргумента
SEC_TO_TIME() Конвертация секунды в формат ‘ЧЧ:MM:СС’.
SECOND() Получение секунды (0-59)
MySQL STR_TO_DATE() Преобразование строки в дату
SUBTIME() Вычитание времени
SYSDATE() Получение времени, в момент которого была выполнена функция
TIME_FORMAT() Установка формата времени
TIME_TO_SEC() Получение аргумента, преобразованного в секунды
TIME() Получение части времени из выражения, передаваемого в качестве аргумента
TIMEDIFF() Вычитание времени
TIMESTAMP() Получение даты или выражения дата-время если используется один аргумент. С двумя аргументами возвращается их сумма
TIMESTAMPADD() Добавление интервала к дате-времени
TIMESTAMPDIFF() Вычитание интервала из даты-времени
TO_DAYS() Получение аргумента даты, преобразованный в дни
UNIX_TIMESTAMP() Получение даты-времени в формате UNIX, в формат, допускаемый в MySQL
UTC_DATE() Получение текущей даты в UTC
UTC_TIME() Получение текущего времени в UTC
UTC_TIMESTAMP() Получение текущей даты-времени в UTC
WEEK() Получение номера недели
WEEKDAY() Получение индекса дня недели
WEEKOFYEAR() Получение календарной недели даты (1-53)
YEAR() Получение года
YEARWEEK() Получение года и недели
Опубликован: 24.05.2020 г.

См. также:

Работа с базой данных в WordPress
SQL-запросы для смены домена в WordPress
Как изменить тип таблиц в MySQL?
Изменение кодировки таблиц в базе MySQL
Меняем пароль root в MySQL 5.7
Исправление ошибок в базе MySQL
Восстановление пароля root в MySQL
Утилита Mytop для MySQL

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта