Добавление вычисляемого времени к DateTime в SQL – советы

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

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

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

Для добавления к значению DateTime используется функция DATEADD(). Она обеспечивает точный контроль над DateTime, подобно тому как часовщик усправляется со швейцарскими часами. Чтобы прибавить 30 минут, используйте следующую команду:

SQL
Скопировать код
SELECT DATEADD(minute, 30, YourDateTimeColumn) AS UpdatedDateTime FROM YourTable;

Для адаптации команды под ваши задачи, замените minute и 30 на необходимую вам единицу времени и значение, YourDateTimeColumn на имя вашего столбца и YourTable — на имя таблицы.

Вычитание времени осуществляется с лихвой, путём применения отрицательного интервала в функции DATEADD:

SQL
Скопировать код
SELECT DATEADD(hour, -1, YourDateTimeColumn) AS UpdatedDateTime FROM YourTable;
-- Мы путешествуем обратно в прошлое!

В результате вы переместите время на один час назад.

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

Следующий уровень: больший контроль над временем

Вычисление временного продолжительности с помощью DATEDIFF

Если вам нужно узнать интервал времени между двуми календарными датами DateTime до и после модификации, воспользуйтесь функцией DATEDIFF:

SQL
Скопировать код
SELECT 
    OriginalDate, 
    TargetDate, 
    DATEDIFF(minute, OriginalDate, TargetDate) AS MinutesDifference 
FROM YourTable;
-- Путешествия во времени могут быть полезными!

Приведение типов: из DateTime в DATE для повышения точности

Если вас интересует только календарная дата без указания времени, используйте вот такой функционал:

SQL
Скопировать код
SELECT 
    CAST(YourDateTimeColumn AS DATE) AS JustTheDate 
FROM YourTable;
-- Время отдыхает, мы работаем с датами.

Работа с переменными временными интервалами

При необходимости оперировать с переменными интервалами времени, переменные станут вашим верным инструментом:

SQL
Скопировать код
DECLARE @ExtraTime TIME = '03:30:00'; -- 3 часа 30 минут
UPDATE YourTable
SET YourDateTimeColumn = DATEADD(second, DATEDIFF(second, 0, @ExtraTime), YourDateTimeColumn);
-- Время как гость на вашем мероприятии.

Комбинирование даты и времени с помощью CAST

Если требуется соединить дату и время в одно значение DateTime, воспользуйтесь оператором CAST:

SQL
Скопировать код
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 используйте:

SQL
Скопировать код
UPDATE Events
SET EventDateTime = DATEADD(hour, 2, EventDateTime)
-- Дополнительные вагоны для вашего "рельсового состава". 🚃🚃

Визуализация с помощью эмодзи:

Markdown
Скопировать код
Исходный поезд: 🛤️ = 🕒🚃🕓🚃🕔🚃
После изменения:   🛤️ = 🕒🚃🕓🚃🕔🚃🕕🚃🕖🚃

Теперь поезд движется на два часа дальше!

Продвинутые техники и моменты, внимание на которые стоит обратить

Особенности разных версий SQL

Не забывайте, что синтаксис SQL различный в зависимости от его версий, точно так же, как меняется мода. То, что актуально для SQL Server 2008 R2, может быть устаревшим в последующих версиях.

Читабельность кода против эффективности

Хотя короткий код экономит время, читабельность приоритетнее для обеспечения простоты и понимания кода.

Не каждый SQL Server упрощает задачу

Правда в том, что в SQL Server 2008 R2 отсутствуют простые способы объединения даты с определённым временем, поэтому мы используем CAST или CONVERT.

Значимость точности

Если требуется обработать только дату, игнорируя время:

SQL
Скопировать код
SELECT 
    DATEADD(day, DATEDIFF(day, 0, YourDateTimeColumn), 0) AS DateWithoutTime
FROM YourTable;
-- Извини, Время, но ты мне сейчас не нужен.

С помощью DATEDIFF и DATEADD мы сосредоточиваем внимание только на дате, достигая максимальной точности.

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

  1. DATEADD (Transact-SQL) – SQL Server | Microsoft Learn — официальная документация по использованию DATEADD в SQL Server.
  2. Преобразование в дату является SARGable, но стоит ли это делать? – Database Administrators Stack Exchange — обсуждение операции с датами в SQL Server.
  3. MySQL :: Руководство по MySQL 8.0 :: 14.7 Функции даты и времени — официальная документация MySQL по функциям даты и времени.
  4. PostgreSQL: Документация: 16: 9.9. Функции и операторы даты/времени — обзор функций даты/времени в PostgreSQL.
  5. ADD_MONTHS — Количество месяцев по выбранной дате в Oracle и другие аналогичные функции.
  6. IBM Documentation — полная документация IBM for DB2, включающая функции даты и времени.
  7. Использование INTERVAL для добавления или вычитания из DateTime в SQL – Практические примеры — примеры использования ключевого слова INTERVAL для изменения DateTime в SQL.