Функция 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 - от базовых примеров до сложных вычислений и анализа данных по датам. Рассмотрели синтаксис, особые случаи, совместное применение с другими функциями и многое другое. Это будет полезно как новичкам, так и бывалым пользователям.