Вычитание дат в SQL Server: отображение последних дней
Быстрый ответ
Чтобы уменьшить текущую дату на 30 дней в SQL Server, воспользуйтесь функцией DATEADD
:
SELECT DATEADD(day, -30, GETDATE());
Работа с различными типами данных
Преобразование varchar в datetime
Прежде чем проводить операции с датами, переведите строку типа varchar
в datetime
, используя CAST
или CONVERT
:
-- Запустим временной туннель: отправляемся на 30 дней назад!
SELECT DATEADD(day, -30, CAST(varchar_date_column AS datetime))
FROM your_table;
Либо при помощи CONVERT
:
-- Перенесемся на 30 дней назад во времени!
SELECT DATEADD(day, -30, CONVERT(datetime, varchar_date_column, 120))
FROM your_table;
Примечание: Формат 120
соответствует представлению даты в формате yyyy-mm-dd hh:mi:ss
(24-часовой формат).
Вычитание дней из столбцов с datetime
Если ваш столбец уже имеет формат datetime
, все довольно просто:
-- Вспомним прошлое: переходим на 30 дней назад.
SELECT DATEADD(day, -30, datetime_column)
FROM your_table;
Визуализация
Представьте текущую дату как путешествие по временной шкале, в котором вы перемещаетесь на 30 дней назад:
Иллюстрация временного путешествия:
Временная шкала: |...-30д|...-2д|...-1д|📍Сегодня(🏃♂️)|+1д|...|+30д|...
Код для возвращения нашего путешественника на 30 дней назад:
SELECT DATEADD(day, -30, GETDATE());
Визуализация результата:
Временная шкала: |...-30д (🏃♂️)|...-2д|...-1д|📍Сегодня|+1д|...|+30д|...
Анализ сложных случаев
Работа с диапазоном дней
Функция DATEADD
позволяет гибко оперировать датами, работая с разными временными интервалами:
SELECT DATEADD(month, -1, GETDATE()); -- Уменьшаем на 1 месяц
SELECT DATEADD(year, -1, GETDATE()); -- Уменьшаем на 1 год
SELECT DATEADD(hour, -720, GETDATE()); -- Отнимаем 720 часов, что равно 30 дням 😁
Особенности високосных лет
Високосные годы могут внести свои коррективы при вычитании месяцев или лет:
-- Вычитаем год из 29 февраля 2020 года
SELECT DATEADD(year, -1, '20200229'); // Результат: 20190228 (в 2019 году 29 февраля отсутствует)
Работа с часовыми поясами
Чтобы учесть часовые пояса при работе с датами, используйте выражение AT TIME ZONE
:
SELECT DATEADD(day, -30, GETDATE() AT TIME ZONE 'Central European Standard Time');
Распространенные ошибки
Несоответствующие типы данных
Обеспечьте использование подходящих типов данных для хранения даты и времени, это упростит вычисления.
Неучет перехода на летнее/зимнее время
Оставайтесь внимательными во время перехода на летнее/зимнее время, это поможет избежать неточностей в расчетах.
Излишние преобразования
Частое преобразование из varchar
в datetime
может уменьшить производительность, поэтому обновляйте типы данных в базе при необходимости.
Полезные материалы
- Функция DATEADD – Официальная документация Microsoft — Познакомьтесь с использованием функции
DATEADD
в SQL Server. - Функция DATEDIFF – Официальная документация Microsoft — Уточните разницу между датами.
- Функции CAST и CONVERT в SQL Server — Узнайте больше о преобразовании и форматировании дат.
- Как найти время последнего перезапуска SQL Server — Разберитесь в важности работы с датами в операциях SQL Server.