logo

Преобразование datetime в date в MySQL для сравнения

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

Для удаления времени из поля DATETIME используйте функцию DATE():

SQL
Скопировать код
SELECT DATE(datetime_col) FROM table;

Результатом запроса будут даты в формате YYYY-MM-DD, временная составляющая будет исключена.

Не спешите очищать даты...

В некоторых ситуациях применение функции DATE() может оказаться нецелесообразным:

  • Данные имеют привязку к конкретному времени.
  • Необходимо сохранение точных временных отметок.
  • Требуется учёт часового пояса.

Больше, чем один трюк: DATE_FORMAT()

SQL
Скопировать код
SELECT DATE_FORMAT(datetime_col, '%Y-%m-%d') AS formatted_date FROM table;

С помощью функции DATE_FORMAT() можно форматировать дату в соответствии с заданными параметрами.

Рациональные сравнения дат

Старайтесь избегать излишнего использования функций при сравнении дат:

SQL
Скопировать код
SELECT * FROM table WHERE DATE(datetime_col) = '2023-03-15';

Для более эффективных SQL-запросов давайте возможность MySQL проводить вычисления:

SQL
Скопировать код
SELECT * FROM table WHERE datetime_col >= '2023-03-15' AND datetime_col < '2023-03-16';

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

Представьте 🍉 дату и время. Нашей целью является удаление временной составляющей (как будто мы снимаем кожуру), оставив только дату (плод):

Markdown
Скопировать код
📅 Полное значение DateTime: 2023-03-15 08:30:00
🔪 Очиститель: Функция DATE()

Результат очистки:

SQL
Скопировать код
SELECT DATE(`datetime_column`) FROM `table`;

Результат будет иметь вид очищенного кусочка даты 🍉:

Markdown
Скопировать код
| Дата       |
|------------|
| 2023-03-15 |

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

Часовые пояса: когда каждая минута имеет значение

Для корректировки даты с учётом часового пояса используйте следующую конструкцию:

SQL
Скопировать код
SELECT CONVERT_TZ(datetime_col, '+00:00', 'SYSTEM') AS user_timezone_date FROM table;

Данный запрос конвертирует datetime_col в часовой пояс системы.

NULL не всегда означает отсутствие информации

Если datetime_col может содержать NULL:

SQL
Скопировать код
-- NULL? Значение по умолчанию на помощь.
SELECT IFNULL(DATE(datetime_col), 'DefaultValue') FROM table;

В случае отсутствия значения вернётся дата по умолчанию, что не помешает вашим планам.

Хорошее, плохое и уродливое: устаревшие данные

Как работать с датами в нестандартных форматах:

SQL
Скопировать код
SELECT STR_TO_DATE(string_date_col, '%Y-%m-%d %H:%i:%s') FROM table;

Этот запрос поможет преобразовать строковые представления даты и времени обратно в формат даты.

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

  1. Документация MySQL 8.0 – Функции даты и времени — полный обзор функций даты и времени в MySQL.
  2. Функция DATE_FORMAT() в MySQL — инструмент для форматирования дат в MySQL.
  3. Руководство Tutorialspoint по функциям даты и времени в MySQL — детальное руководство по работе с датой и временем в MySQL.