DATEPART (Transact-SQL)
Возвращает целое число, представляющее указанный компонент datepart указанной даты date.
Общие сведения обо всех типах данных и функциях даты и времени в языке Transact-SQL см. в разделе Типы данных и функции даты и времени (Transact-SQL).
Синтаксические обозначения в Transact-SQL
Синтаксис
DATEPART ( datepart , date )
Аргументы
datepart
Часть переменной типа date (значение даты или времени), имеющая значение типа integer. В следующей таблице перечислены все допустимые аргументы datepart. Эквивалентные переменные, определяемые пользователем, являются недопустимыми.datepart
Сокращения
year
yy, yyyy
quarter
qq, q
month
mm, m
dayofyear
dy, y
day
dd, d
week
wk, ww
weekday
dw
hour
hh
minute
mi, n
second
ss, s
millisecond
ms
microsecond
mcs
nanosecond
ns
TZoffset
tz
ISO_WEEK
isowk, isoww
date
Выражение, которое можно привести к значению типа time, date, smalldatetime, datetime, datetime2 или datetimeoffset. Аргумент date может быть выражением, выражением столбца, определяемой пользователем переменной или строковым литералом.Во избежание неоднозначности используйте четырехзначную запись года. Сведения об обозначении года двумя цифрами см. в разделе Настройка параметра конфигурации сервера two digit year cutoff.
Тип возвращаемых данных
int
Возвращаемое значение
Каждое выражение datepart и его краткие формы возвращают одно и то же значение.
Возвращаемое значение зависит от языка среды, задаваемого инструкцией SET LANGUAGE, и от параметра Настройка параметра конфигурации сервера «язык по умолчанию» для имени входа. Если значение date для некоторых форматов является строковым литералом, то тип возвращаемого значения зависит от формата, заданного с помощью функции SET DATEFORMAT. Инструкция SET DATEFORMAT не влияет на возвращаемое значение, если дата представляется выражением столбца типа данных даты или времени.
Ниже представлена таблица соответствия аргументов функции datepart и значений, возвращенных выражением SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10'). Аргумент функции date имеет тип datetimeoffset(7). Масштаб значения, возвращаемого функцией nanosecond datepart, составляет 9 (.123456700). При этом два последних значения всегда имеют значение 00.
datepart |
Возвращаемое значение |
---|---|
year, yyyy, yy |
2007 |
quarter, qq, q |
4 |
month, mm, m |
10 |
dayofyear, dy, y |
303 |
day, dd, d |
30 |
week, wk, ww |
45 |
weekday, dw |
1 |
hour, hh |
12 |
minute, n |
15 |
second, ss, s |
32 |
millisecond, ms |
123 |
microsecond, mcs |
123456 |
nanosecond, ns |
123456700 |
TZoffset, tz |
310 |
Аргументы функции datepart, содержащие информацию о номере недели и дня
Когда переменная datepart содержит значение week (wk, ww) или weekday (dw), то тип возвращаемого значения определяется установками функции SET DATEFIRST.
1 января любого года определяет начальное число для раздела даты week datepart, например: DATEPART (wk, 'Jan 1, xxxx') = 1, где xxxx — любой год.
Ниже представлена таблица возвращаемых значений параметров week и weekday datepart даты 21.04.2007 с каждым аргументом функции SET DATEFIRST. 1 января 2007 г. — первый понедельник в году. 21 апреля 2007 г. — суббота. SET DATEFIRST 7, воскресенье задается по умолчанию для региональных настроек «Английский (США)» Английский язык.
SET DATEFIRST аргумент |
week возвращаемое |
weekday возвращаемое |
---|---|---|
1 |
16 |
6 |
2 |
17 |
5 |
3 |
17 |
4 |
4 |
17 |
3 |
5 |
17 |
2 |
6 |
17 |
1 |
7 |
16 |
7 |
Аргументы функции datepart, отображающие год, месяц и день даты
Значения, возвращаемые в результате выполнения команд DATEPART (year, date), DATEPART (month, date) и DATEPART (day, date), совпадают с результатами выполнения функций YEAR, MONTH и DAY, соответственно.
ISO_WEEK datepart
Стандарт ISO 8601 включает в себя систему отсчета дней и недель ISO. Каждая неделя приписывается тому году, в котором находится ее четверг. Например, 1-я неделя 2004 г. (2004W01) считается с понедельника 29 декабря 2003 г. по воскресенье 4 января 2004 г. Наибольшее число недель в году может составлять 52 или 53. Этот стиль нумерации обычно используется в странах и регионах Европы, но редко в других странах.
Система отсчета недель в разных странах и регионах может не совпадать со стандартом ISO. Как показано в следующей таблице, существует как минимум шесть методов отсчета:
Первый день недели |
Содержание первой недели года |
Двойное присвоение недель |
Применяется в: |
---|---|---|---|
Воскресенье |
1 января, Первая суббота, 1–7 дней года |
Да |
США |
Понедельник |
1 января, Первое воскресенье, 1–7 дней года |
Да |
Большинство стран Европы, а также Великобритания |
Понедельник |
4 января, Первый четверг 4–7 дней года |
Нет |
ISO 8601, Норвегия и Швеция |
Понедельник |
7 января, Первый понедельник 7 дней года |
Нет |
|
Среда |
1 января, Первый вторник, 1–7 дней года |
Да |
|
Суббота |
1 января, Первая пятница, 1–7 дней года |
Да |
TZoffset
Значение переменной TZoffset (tz) возвращает количество минут (со знаком). В результате выполнения представленной ниже инструкции выдается значение временного смещения 310 минут.
SELECT DATEPART (TZoffset, 2007-05-10 00:00:01.1234567 +05:10);
Если аргумент datepart содержит переменную TZoffset (tz), а аргумент date имеет тип, отличный от datetimeoffset, возвращается значение NULL.
Аргумент даты типа smalldatetime
Если аргумент date имеет тип smalldatetime, для секунд возвращается значение 00.
Возвращается значение по умолчанию для аргумента функции datepart, который отличен от даты
Если тип данных аргумента date не содержит указанной части datepart, будет возвращаться значение по умолчанию для этой части datepart, только если для date указан литерал.
Например, значение «год-месяц-день» по умолчанию для любого типа данных date равно 1900-01-01. Следующая инструкция содержит аргументы компонентов даты для datepart, аргумент времени для date и возвращает 1900, 1, 1, 1, 2.
SELECT DATEPART(year, '12:10:30.123')
,DATEPART(month, '12:10:30.123')
,DATEPART(day, '12:10:30.123')
,DATEPART(dayofyear, '12:10:30.123')
,DATEPART(weekday, '12:10:30.123');
Если date указан как переменная или столбец таблицы и тип данных переменной или столбца не содержит указанной части datepart, возвращается ошибка 9810. Следующий пример кода заканчивается ошибкой, потому что год даты не является действительным для типа данных time, объявленного для переменной @t.
DECLARE @t time = '12:10:30.123';
SELECT DATEPART(year, @t);
Доли секунды
Отображение долей секунд производится, как показано в следующих инструкциях:
SELECT DATEPART(millisecond, '00:00:01.1234567'); -- Returns 123
SELECT DATEPART(microsecond, '00:00:01.1234567'); -- Returns 123456
SELECT DATEPART(nanosecond, '00:00:01.1234567'); -- Returns 123456700
Замечания
Функция DATEPART может использоваться в предложениях WHERE, HAVING, GROUP BY и ORDER BY, а также при составлении списка выбора.
В SQL Server 2012 функция DATEPART неявным образом приводит строковые литералы к типу datetime2. Это означает, что DATEPART не поддерживает формат ГЧМ (год, число, месяц) при передаче даты в виде строки. Для использования формата ГЧМ (год, число, месяц) необходимо явно привести строку к типу datetime или smalldatetime.
Примеры
В ходе выполнения представленного ниже примера производится отображение значения базового года отсчета. Значение базового года используется при расчетах, связанных с датами. В следующем примере дата указана как число. Обратите внимание на то, что SQL Server интерпретирует 0 как 1 января 1900 г.
SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0);
-- Returns: 1900 1 1 */