Синтаксис
DATEADD ( datepart , number, date )
Эта функция возвращает значение типа datetime, которое получается добавлением к дате date количества интервалов типа datepart, равного number. Например, мы можем к заданной дате добавить любое число лет, дней, часов, минут и т.д. Допустимые значения аргумента datepart приведены ниже и взяты из BOL.
| Datepart
| Допустимые сокращения
|
| Year - год
| yy, yyyy
|
| Quarter - квартал
| qq, q
|
| Month - месяц
| mm, m
|
| Dayofyear - день года
| dy, y
|
| Day - день
| dd, d
|
| Week - неделя
| wk, ww
|
| Hour - час
| hh
|
| Minute - минута
| mi, n
|
| Second - секунда
| ss, s
|
| Millisecond - миллисекунда
| ms
|
Пусть сегодня 23/01/2004, и мы хотим узнать, какой день будет через неделю. Мы можем написать
| SELECT DATEADD(day, 7, current_timestamp)
|
а можем и так
| SELECT DATEADD(ww, 1, current_timestamp)
|
В результате получим одно и то же; что-то типа 2004-01-30 19:40:58.923.
Однако мы не можем в этом случае написать
| SELECT DATEADD(mm, 1/4, current_timestamp)
|
потому, что дробная часть значения аргумента datepart отбрасывается, и мы получим 0 вместо одной четвертой и, как следствие, текущий день.
Кроме того, мы можем использовать вместо CURRENT_TIMESTAMP функцию T-SQL GETDATE() с тем же самым эффектом. Наличие двух идентичных функций поддерживается, видимо, в ожидании последующего развития стандарта.
Пример (схема 4). Определить, какой будет день через неделю после последнего полета.
| SELECT DATEADD(day, 7, (SELECT MAX(date) max_date FROM pass_in_trip))
|
Использование подзапроса в качестве аргумента допустимо, т.к. этот подзапрос возвращает ЕДИНСТВЕННОЕ значение типа datetime.