Преобразование datetime в date в MySQL для сравнения
Быстрый ответ
Для удаления времени из поля DATETIME
используйте функцию DATE()
:
SELECT DATE(datetime_col) FROM table;
Результатом запроса будут даты в формате YYYY-MM-DD
, временная составляющая будет исключена.
Не спешите очищать даты...
В некоторых ситуациях применение функции DATE()
может оказаться нецелесообразным:
- Данные имеют привязку к конкретному времени.
- Необходимо сохранение точных временных отметок.
- Требуется учёт часового пояса.
Больше, чем один трюк: DATE_FORMAT()
SELECT DATE_FORMAT(datetime_col, '%Y-%m-%d') AS formatted_date FROM table;
С помощью функции DATE_FORMAT()
можно форматировать дату в соответствии с заданными параметрами.
Рациональные сравнения дат
Старайтесь избегать излишнего использования функций при сравнении дат:
SELECT * FROM table WHERE DATE(datetime_col) = '2023-03-15';
Для более эффективных SQL-запросов давайте возможность MySQL проводить вычисления:
SELECT * FROM table WHERE datetime_col >= '2023-03-15' AND datetime_col < '2023-03-16';
Визуализация
Представьте 🍉 дату и время. Нашей целью является удаление временной составляющей (как будто мы снимаем кожуру), оставив только дату (плод):
📅 Полное значение DateTime: 2023-03-15 08:30:00
🔪 Очиститель: Функция DATE()
Результат очистки:
SELECT DATE(`datetime_column`) FROM `table`;
Результат будет иметь вид очищенного кусочка даты 🍉:
| Дата |
|------------|
| 2023-03-15 |
Иногда отбрасывание времени может быть нецелесообразно; временная составляющая может быть важной, и её следует сохранять или изменять с помощью других функций MySQL.
Часовые пояса: когда каждая минута имеет значение
Для корректировки даты с учётом часового пояса используйте следующую конструкцию:
SELECT CONVERT_TZ(datetime_col, '+00:00', 'SYSTEM') AS user_timezone_date FROM table;
Данный запрос конвертирует datetime_col
в часовой пояс системы.
NULL не всегда означает отсутствие информации
Если datetime_col
может содержать NULL
:
-- NULL? Значение по умолчанию на помощь.
SELECT IFNULL(DATE(datetime_col), 'DefaultValue') FROM table;
В случае отсутствия значения вернётся дата по умолчанию, что не помешает вашим планам.
Хорошее, плохое и уродливое: устаревшие данные
Как работать с датами в нестандартных форматах:
SELECT STR_TO_DATE(string_date_col, '%Y-%m-%d %H:%i:%s') FROM table;
Этот запрос поможет преобразовать строковые представления даты и времени обратно в формат даты.
Полезные материалы
- Документация MySQL 8.0 – Функции даты и времени — полный обзор функций даты и времени в MySQL.
- Функция DATE_FORMAT() в MySQL — инструмент для форматирования дат в MySQL.
- Руководство Tutorialspoint по функциям даты и времени в MySQL — детальное руководство по работе с датой и временем в MySQL.