Сравнение функций 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 для вычислений обнуляются.
Примечание. |
---|
Функция 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 г. |
|