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). Масштаб значения, возвращаемого функцией nanoseconddatepart, составляет 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 января любого года определяет начальное число для раздела даты weekdatepart, например: DATEPART (wk, 'Jan 1, xxxx') = 1, где xxxx — любой год.

Ниже представлена таблица возвращаемых значения параметров week и weekdaydatepart даты «21.04.2007» с каждым аргументом функции SET DATEFIRST. 1 января 2007 года является воскресеньем. 21 апреля 2007 года — суббота. Для языкового стандарта «U.S. English» по умолчанию первым днем недели является воскресенье (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. Каждая неделя приписывается тому году, в котором находится ее четверг. Например, первая неделя 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 равно 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');

Значение час-минута-секунда по умолчанию для любого типа данных time равно 00:00:00. Следующая инструкция содержит аргументы компонентов времени для datepart, аргумент даты для date и возвращает 0, 0, 0.

SELECT DATEPART(hour, '2007-06-01')
    ,DATEPART(minute, '2007-06-01')
    ,DATEPART(second, '2007-06-01');

Доли секунды

Отображение долей секунд производится, как показано в следующих инструкциях:

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 2008 функция DATEPART выполняет неявное приведение строковых литералов к типу данных datetime2. При использовании функции DATEPART совместно с функцией DATEADD неявного приведения типов строковых литералов следует избегать. Дополнительные сведения см. в разделе DATEADD (Transact-SQL)

Примеры

В ходе выполнения представленного ниже примера производится отображение значения базового года отсчета. Значение базового года используется при расчетах, связанных с датами. В следующем примере дата указана как число. Обратите внимание на то, что SQL Server интерпретирует 0 как 1 января 1900 г. 

SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0);
-- Returns: 1900    1    1 */

См. также

Справочник