Удаление времени из datetime в SQL Server: способы и функции
Быстрый ответ
Если требуется сохранить только дату, вы можете использовать следующие методы:
С помощью функции CONVERT:
SELECT CONVERT(date, GETDATE());
Или с использованием CAST:
SELECT CAST(GETDATE() AS date);
Эти методы исключат время из результата, оставив только дату.
Точность обработки
Разберем различные подходы для точной обработки временных значений в SQL Server.
Сохраняем дату, отбрасываем время
Чтобы отделить дату от времени, используйте следующий код:
SELECT CAST(<your_datetime_column> AS date)
FROM your_table;
Обрезка до часа или минуты
Если вам необходимо округлить время до часа или минуты, сохранив дату, используйте следующие конструкции:
-- Округляем до часа
SELECT DATEADD(hour, DATEDIFF(hour, 0, <your_datetime_column>), 0)
FROM your_table;
-- Округляем до минуты
SELECT DATEADD(minute, DATEDIFF(minute, 0, <your_datetime_column>), 0)
FROM your_table;
Для округления применяются функции DATEADD и DATEDIFF.
Разбор нестандартных случаев
Работая с datetime в SQL Server, иногда приходится столкнуться с неординарными ситуациями:
Предотвращение переполнения
Чтобы избежать переполнения, используйте такой код:
SELECT DATEADD(second, DATEDIFF(second, '20000101', <your_datetime_column>), '20000101')
FROM your_table;
Выберите дату, которая по времени близка к периоду хранения данных, чтобы исключить переполнение.
Сохранение формата datetime
Чтобы сохранить формат datetime с обнулением времени, примените такой подход:
SELECT CAST(CAST(<your_datetime_column> AS date) AS datetime)
FROM your_table;
При этом время будет установлено на 00:00:00.000.
Стратегия обрезки
Избегайте преобразования в строки
Преобразование datetime в строку может показаться простым решением для обрезки, но это может отрицательно повлиять на производительность и точность данных.
Доверяйте своему приложению
Иногда стоит полагаться на функциональные возможности вашего приложения при обработке datetime, это поможет разгрузить базу данных.
Визуализация
Восприятие обрезки datetime в SQL Server можно представить как оптимизацию рабочего процесса:
| Отчет в реальном времени | Отчет после обрезки |
| ----------------------- | ---------------- |
| 2023-03-18 14:36:51 | 🚂⏱️🌄 |
| 2023-03-18 08:20:33 | 🚂⏱️🌄 |
| 2023-03-19 23:45:07 | 🚂⏱️🌄 |
Теперь продемонстрируем это представление в коде:
SELECT CAST(YOUR_DATETIME_COLUMN AS DATE) FROM your_table;
Это можно сравнить с приверженностью более простого расписания, несмотря на ущерб деталям:
Детальное расписание: [14:36, 08:20, 23:45] ⏲️❌
Упрощенное расписание: [🌄, 🌄, 🌄] // Только даты, пожалуйста!
Использование встроенных функций
Помните о встроенных функциях SQL Server, которые могут помочь при работе с datetime.
Дружественная к системе datetime
Пример использования системного времени:
SELECT CONVERT(DATE, CURRENT_TIMESTAMP);
Этот запрос основан на текущих дате и времени сервера.
Помощь Microsoft
В документации Microsoft можно найти подробную информацию о возможностях работы с датой и временем.
Выставляйте запросы как профессионал
Цените свои индексы
Для повышения производительности запросов используйте индексированные столбцы datetime.
Применяйте фильтры, затем обрезку
По возможности, применяйте фильтрацию до обрезки datetime. Этот подход делает запрос более оптимизированным.
Полезные материалы
- CAST и CONVERT (Transact-SQL) – SQL Server | Microsoft Learn — Руководство по использованию
CAST
иCONVERT
. - Как вернуть только дату из полей типа данных DateTime в SQL Server – Stack Overflow — Дискуссии и решения сообщества.
- SQL Server: Функция DATEADD — Азы работы с функцией
DATEADD
. - Функции SQL Server — Энциклопедия функций со множеством примеров.
На пути к цели и кодируйте: Упражнения ведут к совершенству. Если материал оказался полезным, не забудьте проголосовать. Желаю успешного кодирования!👩💻