Вычитание дат в SQL Server: отображение последних дней

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

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

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

Чтобы уменьшить текущую дату на 30 дней в SQL Server, воспользуйтесь функцией DATEADD:

SQL
Скопировать код
SELECT DATEADD(day, -30, GETDATE());
Кинга Идем в IT: пошаговый план для смены профессии

Работа с различными типами данных

Преобразование varchar в datetime

Прежде чем проводить операции с датами, переведите строку типа varchar в datetime, используя CAST или CONVERT:

SQL
Скопировать код
-- Запустим временной туннель: отправляемся на 30 дней назад!
SELECT DATEADD(day, -30, CAST(varchar_date_column AS datetime))
FROM your_table;

Либо при помощи CONVERT:

SQL
Скопировать код
-- Перенесемся на 30 дней назад во времени!
SELECT DATEADD(day, -30, CONVERT(datetime, varchar_date_column, 120))
FROM your_table;

Примечание: Формат 120 соответствует представлению даты в формате yyyy-mm-dd hh:mi:ss (24-часовой формат).

Вычитание дней из столбцов с datetime

Если ваш столбец уже имеет формат datetime, все довольно просто:

SQL
Скопировать код
-- Вспомним прошлое: переходим на 30 дней назад.
SELECT DATEADD(day, -30, datetime_column)
FROM your_table;

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

Представьте текущую дату как путешествие по временной шкале, в котором вы перемещаетесь на 30 дней назад:

Иллюстрация временного путешествия:

Markdown
Скопировать код
Временная шкала: |...-30д|...-2д|...-1д|📍Сегодня(🏃‍♂️)|+1д|...|+30д|...

Код для возвращения нашего путешественника на 30 дней назад:

SQL
Скопировать код
SELECT DATEADD(day, -30, GETDATE());

Визуализация результата:

Markdown
Скопировать код
Временная шкала: |...-30д (🏃‍♂️)|...-2д|...-1д|📍Сегодня|+1д|...|+30д|...

Анализ сложных случаев

Работа с диапазоном дней

Функция DATEADD позволяет гибко оперировать датами, работая с разными временными интервалами:

SQL
Скопировать код
SELECT DATEADD(month, -1, GETDATE()); -- Уменьшаем на 1 месяц
SELECT DATEADD(year, -1, GETDATE());  -- Уменьшаем на 1 год
SELECT DATEADD(hour, -720, GETDATE()); -- Отнимаем 720 часов, что равно 30 дням 😁

Особенности високосных лет

Високосные годы могут внести свои коррективы при вычитании месяцев или лет:

SQL
Скопировать код
-- Вычитаем год из 29 февраля 2020 года
SELECT DATEADD(year, -1, '20200229'); // Результат: 20190228 (в 2019 году 29 февраля отсутствует)

Работа с часовыми поясами

Чтобы учесть часовые пояса при работе с датами, используйте выражение AT TIME ZONE:

SQL
Скопировать код
SELECT DATEADD(day, -30, GETDATE() AT TIME ZONE 'Central European Standard Time');

Распространенные ошибки

Несоответствующие типы данных

Обеспечьте использование подходящих типов данных для хранения даты и времени, это упростит вычисления.

Неучет перехода на летнее/зимнее время

Оставайтесь внимательными во время перехода на летнее/зимнее время, это поможет избежать неточностей в расчетах.

Излишние преобразования

Частое преобразование из varchar в datetime может уменьшить производительность, поэтому обновляйте типы данных в базе при необходимости.

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

  1. Функция DATEADD – Официальная документация Microsoft — Познакомьтесь с использованием функции DATEADD в SQL Server.
  2. Функция DATEDIFF – Официальная документация Microsoft — Уточните разницу между датами.
  3. Функции CAST и CONVERT в SQL Server — Узнайте больше о преобразовании и форматировании дат.
  4. Как найти время последнего перезапуска SQL Server — Разберитесь в важности работы с датами в операциях SQL Server.