Сравнение функций DATEADD и DATEDIFF

Изменения: 14 апреля 2006 г.

Функция DATEADD добавляет промежуток к указанной дате. Например, если срок исполнения всех заказов в таблице SalesOrderHeader отодвинут на 3 дня, можно получить новые даты, выполнив следующую инструкцию:

USE AdventureWorks;
GO
SELECT DATEADD(day, 3, DueDate)
FROM Sales.SalesOrderHeader;
GO

Если параметр даты относится к типу данных smalldatetime, результат также будет типа smalldatetime. С помощью DATEADD можно добавлять секунды и миллисекунды значениям типа smalldatetime, но это имеет смысл, только если дата, возвращаемая функцией DATEADD, меняется хотя бы на 1 минуту.

Функция DATEDIFF вычисляет период времени в заданных единицах измерения между второй и первой указанными датами. Другими словами, она находит промежуток между двумя датами. Ее результат — целое число со знаком, равное date2 - date1 в заданных единицах измерения.

Следующий запрос использует дату November 30, 2001 и находит прошедшее количество дней между датой DueDate и следующей датой:

USE AdventureWorks;
GO
SELECT DATEDIFF(day, DueDate, 'Nov 30 2001')
FROM Sales.SalesOrderHeader;
GO

Для строк таблицы SalesOrderHeader со значением 21 октября 2001 в столбце DueDate результат будет равен 40 (между 21 октября и 30 ноября 40 дней). Чтобы вычислить промежуток в месяцах, выполните следующий запрос:

USE AdventureWorks;
GO
SELECT interval = DATEDIFF(month, DueDate, 'Nov 30 2001')
FROM Sales.SalesOrderHeader;
GO

Этот запрос вернет значение 1 для строк со значением «октябрь» столбца DueDate и значение 5 — для строк со значением «июнь» столбца DueDate.

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

Если один или оба аргумента этой функции относятся к типу smalldatetime, то для вычислений они преобразуются к типу datetime. Секунды и миллисекунды в значениях типа smalldatetime для вычислений обнуляются.

ms187081.note(ru-ru,SQL.90).gifПримечание.
Функция DATEDIFF возвращает количество границ даты и времени, пересекаемых между двумя указанными датами. В следующем примере первая инструкция возвращает 1 год. (Т.е. 2006 - 2005 = 1) Вторая инструкция возвращает 1 месяц. (Т.е. январь 2006 года - декабрь 2005 года) Третья инструкция возвращается 12 как количество дней между двумя датами.
SELECT DATEDIFF(year, '20051220', '20060101')
SELECT DATEDIFF(month, '20051220', '20060101')
SELECT DATEDIFF(day, '20051220', '20060101')

См. также

Другие ресурсы

Функции CAST и CONVERT (Transact-SQL)
DATENAME (Transact-SQL)
Функции даты и времени (Transact-SQL)
DATEPART (Transact-SQL)
DATEADD (Transact-SQL)
GETDATE (Transact-SQL)
DATEDIFF (Transact-SQL)
SET DATEFORMAT (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

14 апреля 2006 г.

Новое содержимое:
  • Добавлены сведения о том, как функция DATEDIFF вычисляет разницу между частями даты.