Сравнение дат и времени в MySQL: корректный запрос

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В MySQL для сравнения значений типа DATETIME используются операторы сравнения =, <, >. Если при сравнении необходимо игнорировать время, используется функция DATE():

SQL
Скопировать код
-- Вы ждете бесплатные тако в указанное время? Вот как вы можете их найти!
SELECT * FROM таблица WHERE datetime_колонка = '2023-01-01 12:00:00';

-- Когда важен сам день, а время – нет
SELECT * FROM таблица WHERE DATE(datetime_колонка) = '2023-01-01';

Следует соблюдать стандартный формат времени ISO 8601 ('ГГГГ-ММ-ДД ЧЧ:ММ:СС').

Для работы с нестандартными форматами дат можно использовать функцию STR_TO_DATE() для явного преобразования:

SQL
Скопировать код
-- Если ваши даты отличаются от стандартных
SELECT * FROM таблица WHERE datetime_колонка = STR_TO_DATE('01,01,2023','%d,%m,%Y');

MySQL способен выполнять неявное преобразование строк при их сравнении с DATETIME.

Кинга Идем в IT: пошаговый план для смены профессии

Говорите прямо: явное лучше неявного

Используйте явное преобразование, чтобы избежать ошибок:

SQL
Скопировать код
-- Будьте точны: "Мне нравится, когда даты совместимы"
SELECT * FROM таблица WHERE datetime_колонка = CAST('2023-01-01' AS DATETIME);

Данный подход гарантирует точность сравнения и корректную работу с типом DATETIME в MySQL.

Между двумя датами: использование BETWEEN

Для проверки вхождения в диапазон времени используйте комбинацию BETWEEN и CAST():

SQL
Скопировать код
-- Посмотрим, что происходило в январе:
SELECT * FROM таблица WHERE datetime_колонka BETWEEN CAST('2023-01-01' AS DATETIME) AND CAST('2023-01-31' AS DATETIME);

С помощью такого сравнения точно определяются значения в выбранном интервале.

Знать свои типы данных: типы имеют значение

Важно учитывать типы данных. Сравнение INT и DATETIME приводит к автоматическому преобразованию INT в DATETIME. Поэтому всегда проверяйте типы данных столбцов, с которыми работаете.

Визуализация

Сравним операции сравнения дат в MySQL с состязаниями в спорте:

Markdown
Скопировать код
| Спортсмен       | Скорость | Дистанция   | Время             |
| --------------  | -------- | ----------- | ----------------- |
| Дата A 🏃‍♂️    | Быстрый  | 5 км        | '2023-04-01'      |
| Дата B 🏃‍♀️    | Средний  | 3 км        | '2023-03-01'      |
Markdown
Скопировать код
Старт 🏁: '2023-01-01'
Финиш 🎌: '2023-04-30'

Аналогия для сравнения:

Markdown
Скопировать код
**A** ближе к финишу 🎌 (A опережает B)
**B** дальше от старта 🏁 (B отстывает от A)

Таким образом, мы визуализируем понятия "ближе к будущему" и "ближе к прошлому".

За рамках основ: дополнительные сценарии сравнения

Танцы с временем

При работе с приложениями в разных временных зонах используйте CONVERT_TZ() для синхронизации времени:

SQL
Скопировать код
-- Временная зона может оказаться критической
SELECT * FROM таблица WHERE CONVERT_TZ(datetime_колонка,'UTC','America/New_York') = '2023-01-01 08:00:00';

Точность превыше всего

Проблемы точности времени решаются с помощью TIMESTAMP и функций, вроде CURRENT_TIMESTAMP:

SQL
Скопировать код
-- Когда каждая секунда на счету:
SELECT * FROM таблица WHERE TIMESTAMPDIFF(SECOND, datetime_колонка, CURRENT_TIMESTAMP) < 60;

В данном случае выбираются записи, сделанные за последние 60 секунд.

Внимание: учтите особенности

Будьте внимательны, учитывая високосные годы и переход на летнее время. Функции вроде LAST_DAY() помогут избежать ошибок:

SQL
Скопировать код
-- Не дадим февралю забрать лишние дни
SELECT * FROM таблица WHERE datetime_колонка < LAST_DAY('2023-02-01');

Полезные материалы

  1. MySQL :: Руководство по MySQL 8.0 :: 14.7 Функции даты и времени — подробная документация по функциям работы с датами и временем в MySQL.
  2. MySQL – Функции даты и времени — пошаговое руководство по функциям MySQL для работы с датами и временем.
  3. SQL | Функции даты – GeeksforGeeks — вводное руководство по SQL-функциям работы с датами со множеством примеров и практических задач.