Добавление вычисляемого времени к DateTime в SQL – советы
Быстрый ответ
Для добавления к значению DateTime используется функция DATEADD()
. Она обеспечивает точный контроль над DateTime
, подобно тому как часовщик усправляется со швейцарскими часами. Чтобы прибавить 30 минут, используйте следующую команду:
SELECT DATEADD(minute, 30, YourDateTimeColumn) AS UpdatedDateTime FROM YourTable;
Для адаптации команды под ваши задачи, замените minute
и 30
на необходимую вам единицу времени и значение, YourDateTimeColumn
на имя вашего столбца и YourTable
— на имя таблицы.
Вычитание времени осуществляется с лихвой, путём применения отрицательного интервала в функции DATEADD
:
SELECT DATEADD(hour, -1, YourDateTimeColumn) AS UpdatedDateTime FROM YourTable;
-- Мы путешествуем обратно в прошлое!
В результате вы переместите время на один час назад.
Следующий уровень: больший контроль над временем
Вычисление временного продолжительности с помощью DATEDIFF
Если вам нужно узнать интервал времени между двуми календарными датами DateTime
до и после модификации, воспользуйтесь функцией DATEDIFF
:
SELECT
OriginalDate,
TargetDate,
DATEDIFF(minute, OriginalDate, TargetDate) AS MinutesDifference
FROM YourTable;
-- Путешествия во времени могут быть полезными!
Приведение типов: из DateTime в DATE для повышения точности
Если вас интересует только календарная дата без указания времени, используйте вот такой функционал:
SELECT
CAST(YourDateTimeColumn AS DATE) AS JustTheDate
FROM YourTable;
-- Время отдыхает, мы работаем с датами.
Работа с переменными временными интервалами
При необходимости оперировать с переменными интервалами времени, переменные станут вашим верным инструментом:
DECLARE @ExtraTime TIME = '03:30:00'; -- 3 часа 30 минут
UPDATE YourTable
SET YourDateTimeColumn = DATEADD(second, DATEDIFF(second, 0, @ExtraTime), YourDateTimeColumn);
-- Время как гость на вашем мероприятии.
Комбинирование даты и времени с помощью CAST
Если требуется соединить дату и время в одно значение DateTime
, воспользуйтесь оператором CAST
:
DECLARE @DateOnly DATE = '2021-01-01';
DECLARE @TimeOnly TIME = '12:00:00';
SELECT
CAST(@DateOnly AS DATETIME) + CAST(@TimeOnly AS DATETIME) AS CombinedDateTime;
-- Свидание между датой и временем!
Визуализация
Время можно представить как ряд вагонов, движущиеся по рельсам 🛤️, где каждый вагон — это час.
Для добавления времени к DateTime
в SQL используйте:
UPDATE Events
SET EventDateTime = DATEADD(hour, 2, EventDateTime)
-- Дополнительные вагоны для вашего "рельсового состава". 🚃🚃
Визуализация с помощью эмодзи:
Исходный поезд: 🛤️ = 🕒🚃🕓🚃🕔🚃
После изменения: 🛤️ = 🕒🚃🕓🚃🕔🚃🕕🚃🕖🚃
Теперь поезд движется на два часа дальше!
Продвинутые техники и моменты, внимание на которые стоит обратить
Особенности разных версий SQL
Не забывайте, что синтаксис SQL различный в зависимости от его версий, точно так же, как меняется мода. То, что актуально для SQL Server 2008 R2, может быть устаревшим в последующих версиях.
Читабельность кода против эффективности
Хотя короткий код экономит время, читабельность приоритетнее для обеспечения простоты и понимания кода.
Не каждый SQL Server упрощает задачу
Правда в том, что в SQL Server 2008 R2 отсутствуют простые способы объединения даты с определённым временем, поэтому мы используем CAST
или CONVERT
.
Значимость точности
Если требуется обработать только дату, игнорируя время:
SELECT
DATEADD(day, DATEDIFF(day, 0, YourDateTimeColumn), 0) AS DateWithoutTime
FROM YourTable;
-- Извини, Время, но ты мне сейчас не нужен.
С помощью DATEDIFF
и DATEADD
мы сосредоточиваем внимание только на дате, достигая максимальной точности.
Полезные материалы
- DATEADD (Transact-SQL) – SQL Server | Microsoft Learn — официальная документация по использованию DATEADD в SQL Server.
- Преобразование в дату является SARGable, но стоит ли это делать? – Database Administrators Stack Exchange — обсуждение операции с датами в SQL Server.
- MySQL :: Руководство по MySQL 8.0 :: 14.7 Функции даты и времени — официальная документация MySQL по функциям даты и времени.
- PostgreSQL: Документация: 16: 9.9. Функции и операторы даты/времени — обзор функций даты/времени в PostgreSQL.
- ADD_MONTHS — Количество месяцев по выбранной дате в Oracle и другие аналогичные функции.
- IBM Documentation — полная документация IBM for DB2, включающая функции даты и времени.
- Использование INTERVAL для добавления или вычитания из DateTime в SQL – Практические примеры — примеры использования ключевого слова INTERVAL для изменения DateTime в SQL.