SQL DateAdd: как добавить или вычесть дни, месяцы и годы в функции даты

Функция DateAdd в SQL позволяет легко манипулировать датами - добавлять или вычитать дни, месяцы, годы и другие временные промежутки. Это очень полезно для анализа данных, планирования, расчета сроков и многого другого. Давайте разберемся, как использовать все возможности DateAdd в SQL Server и других СУБД.

Основы функции DateAdd

Функция DateAdd имеет следующий синтаксис:

DATEADD(datepart, number, date)

Она возвращает дату и время, полученные прибавлением указанного числа (number) интервалов, заданного типа (datepart) к исходной дате (date). Например:

SELECT DATEADD(day, 7, '2023-12-01')

Этот запрос прибавит 7 дней к дате 1 декабря 2023 года и вернет '2023-12-08'.

Поддержка в разных СУБД

Функциональность DateAdd реализована во многих популярных СУБД:

  • SQL Server (Transact-SQL)
  • Oracle
  • PostgreSQL
  • MySQL
  • SQLite

Везде принцип работы один и тот же, а различия есть в синтаксисе и поддерживаемых типах дат.

Аргумент datepart

Аргумент datepart определяет, к какой части даты будет прибавлено или отнято указанное число. Возможные значения:

Год year, yyyy, yy
Квартал года quarter, qq, q
Месяц month, mm, m
День месяца day, dd, d
День недели weekday, dw
Час hour, hh
Минута minute, mi, n
Секунда second, ss, s

Рассмотрим несколько конкретных случаев использования функции DateAdd в SQL запросах.

Вычисление будущей или прошлой даты

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

SELECT DATEADD(month, 3, '2023-05-31') AS result

Результат: 2023-08-31

А для получения даты в прошлом применяем отрицательное число:

SELECT DATEADD(year, -1, '2023-12-31') AS result

Результат: 2022-12-31

Расчет периодов

Функция DateAdd может пригодиться для определения промежутков времени, например длительности какого-либо проекта:

DECLARE @start datetime, @end datetime SET @start = '2023-01-01' SET @end = '2023-06-30' SELECT DATEDIFF(MONTH, @start, @end) AS months

Здесь мы вычисляем количество целых месяцев между двумя датами с помощью DATEDIFF и функции DateAdd.

Добавление и вычитание временных промежутков

Основное предназначение DATEADD в SQL — это прибавление и вычитание разных промежутков времени: дней, недель, лет и т.д. Давайте рассмотрим некоторые варианты такого использования подробнее.

Прибавление дней, недель, месяцев

Чтобы добавить к дате некоторое количество дней, используем:

SELECT DATEADD(day, 14, '2023-12-10')

Аналогично для недель и месяцев:

SELECT DATEADD(week, 3, '2023-11-05') SELECT DATEADD(month, 5, '2023-03-22')

Использование отрицательных чисел

Как мы уже видели ранее, отрицательное число в аргументе number будет вычитать временной промежуток вместо добавления:

SELECT DATEADD(month, -1, '2023-06-30') AS result

Результат: 2023-05-30

Вычисление разницы между датами

Чтобы найти сколько дней, месяцев или лет прошло между двумя датами, вычитаем одну дату из другой:

DECLARE @date1 datetime, @date2 datetime SET @date1 = '2019-05-05' SET @date2 = '2023-05-05' SELECT DATEDIFF(YEAR, @date1, @date2) AS years\

Заключение

Функция sql dateadd в SQL позволяет легко прибавлять и вычитать дни, месяцы и годы из даты. В этой статье мы подробно разобрали, как использовать все возможности dateadd - от базовых примеров до сложных вычислений и анализа данных по датам. Рассмотрели синтаксис, особые случаи, совместное применение с другими функциями и многое другое. Это будет полезно как новичкам, так и бывалым пользователям.

Комментарии