DATEPART (Transact-SQL)DATEPART (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ: даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Эта функция возвращает целое число, представляющее указанную часть datepart заданного типа date.This function returns an integer representing the specified datepart of the specified date.

Обзор всех типов данных и функций даты и времени в языке Transact-SQLTransact-SQL см. в статье Типы данных и функции даты и времени (Transact-SQL).See Date and Time Data Types and Functions (Transact-SQL) for an overview of all Transact-SQLTransact-SQL date and time data types and functions.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

DATEPART ( datepart , date )  

АргументыArguments

datepartdatepart
Определенная часть аргумента date, для которого функция DATEPART вернет значение типа integer.The specific part of the date argument for which DATEPART will return an integer. В приведенной ниже таблице перечислены все допустимые аргументы datepart.This table lists all valid datepart arguments.

Примечание

DATEPART не принимает эквивалентные переменные, определяемые пользователем, для аргументов datepart.DATEPART does not accept user-defined variable equivalents for the datepart arguments.

datepartdatepart СокращенияAbbreviations
yearyear yy, yyyyyy, yyyy
quarterquarter qq, qqq, q
monthmonth mm, mmm, m
dayofyeardayofyear dy, ydy, y
dayday dd, ddd, d
weekweek wk, wwwk, ww
weekdayweekday dwdw
hourhour ччhh
minuteminute mi, nmi, n
secondsecond ss, sss, s
millisecondmillisecond msms
microsecondmicrosecond mcsmcs
nanosecondnanosecond nsns
TZoffsetTZoffset tztz
ISO_WEEKISO_WEEK isowk, isowwisowk, isoww

datedate
Выражение, которое разрешается в один из следующих типов данных:An expression that resolves to one of the following data types:

  • datedate
  • datetimedatetime
  • datetimeoffsetdatetimeoffset
  • datetime2datetime2
  • smalldatetimesmalldatetime
  • timetime

Для date DATEPART будет принимать столбец выражения, выражение, строковый литерал или определяемую пользователем переменную.For date, DATEPART will accept a column expression, expression, string literal, or user-defined variable. Во избежание неоднозначности используйте четырехзначную запись года.Use four-digit years to avoid ambiguity issues. Сведения о двузначном обозначении года см. в статье Настройка параметра конфигурации сервера two digit year cutoff.See Configure the two digit year cutoff Server Configuration Option for information about two-digit years.

Тип возвращаемых данныхReturn Type

intint

Возвращаемое значениеReturn Value

Каждое выражение datepart и его краткие формы возвращают одно и то же значение.Each datepart and its abbreviations return the same value.

Возвращаемое значение зависит от языка среды, задаваемого инструкцией SET LANGUAGE, и от параметра конфигурации сервера "язык по умолчанию" для имени входа.The return value depends on the language environment set by using SET LANGUAGE, and by the Configure the default language Server Configuration Option of the login. Если значение date является строковым литералом некоторого формата, то возвращаемое значение зависит от функции SET DATEFORMAT.The return value depends on SET DATEFORMAT if date is a string literal of some formats. Инструкция SET DATEFORMAT не изменяет возвращаемое значение, если дата представляется выражением столбца типа данных даты или времени.SET DATEFORMAT does not change the return value when the date is a column expression of a date or time data type.

Ниже представлена таблица соответствия аргументов функции datepart и значений, возвращенных выражением SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10').This table lists all datepart arguments, with corresponding return values, for the statement SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10'). Аргумент date имеет тип данных datetimeoffset(7).The date argument has a datetimeoffset(7) data type. Последние две позиции значения, возвращаемого функцией nanosecond datepart, всегда 00, а масштаб этого значения составляет 9.The last two positions of the nanosecond datepart return value are always 00 and this value has a scale of 9:

.123456700.123456700

datepartdatepart Возвращаемое значениеReturn value
year, yyyy, yyyear, yyyy, yy 2007 г.2007
quarter, qq, qquarter, qq, q 44
month, mm, mmonth, mm, m 1010
dayofyear, dy, ydayofyear, dy, y 303303
day, dd, dday, dd, d 3030
week, wk, wwweek, wk, ww 4545
weekday, dwweekday, dw 11
hour, hhhour, hh 1212
minute, nminute, n 1515
second, ss, ssecond, ss, s 3232
millisecond, msmillisecond, ms 123123
microsecond, mcsmicrosecond, mcs 123456123456
nanosecond, nsnanosecond, ns 123456700123456700
TZoffset, tzTZoffset, tz 310310

Аргументы функции datepart, содержащие информацию о номере недели и дняWeek and weekday datepart arguments

Для week (wk, ww) или weekday (dw) datepart возвращаемое значение DATEPART зависит от значения, заданного функцией SET DATEFIRST.For a week (wk, ww) or weekday (dw) datepart, the DATEPART return value depends on the value set by SET DATEFIRST.

1 января любого года определяет начальное число для раздела даты weekdatepart.January 1 of any year defines the starting number for the weekdatepart. Пример:For example:

DATEPART (wk, 'Jan 1, xxxx') = 1,DATEPART (wk, 'Jan 1, xxxx') = 1

где xxxx — любой год.where xxxx is any year.

Ниже представлена таблица возвращаемых значений параметров week и weekday datepart для датыThis table shows the return value for the week and weekday datepart for

21.04.2007'2007-04-21 '

с каждым аргументом функции SET DATEFIRST.for each SET DATEFIRST argument. 1 января 2007 г. приходится на понедельник.January 1, 2007 falls on a Monday. 21 апреля 2007 г. приходится на субботу.April 21, 2007 falls on a Saturday. Для региональных настроек "Английский (США)"For U.S. English,

по умолчанию используется значениеSET DATEFIRST 7 -- ( Sunday )

SET DATEFIRST 7 (воскресенье).serves as the default. После задания DATEFIRST используйте предлагаемую инструкцию SQL для табличных значений datepart:After setting DATEFIRST, use this suggested SQL statement for the datepart table values:

SELECT DATEPART(week, '2007-04-21 '), DATEPART(weekday, '2007-04-21 ')

SET DATEFIRSTSET DATEFIRST

аргументargument
weekweek

возвращаемоеreturned
weekdayweekday

возвращаемоеreturned
11 1616 66
22 1717 55
33 1717 44
44 1717 33
55 1717 22
66 1717 11
77 1616 77

Аргументы функции datepart, отображающие год, месяц и день датыyear, month, and day datepart Arguments

Значения, возвращаемые в результате выполнения инструкций DATEPART (year, date), DATEPART (month, date) и DATEPART (day, date), совпадают с результатами выполнения функций YEAR, MONTH и DAY, соответственно.The values that are returned for DATEPART (year, date), DATEPART (month, date), and DATEPART (day, date) are the same as those returned by the functions YEAR, MONTH, and DAY, respectively.

ISO_WEEK datepartISO_WEEK datepart

Стандарт ISO 8601 включает в себя систему отсчета дней и недель ISO.ISO 8601 includes the ISO week-date system, a numbering system for weeks. Каждая неделя приписывается тому году, в котором находится ее четверг.Each week is associated with the year in which Thursday occurs. Например, первая неделя 2004 г. (2004W01) считается с понедельника 29 декабря 2003 г. по воскресенье 4 января 2004 г.For example, week 1 of 2004 (2004W01) covered Monday, 29 December 2003 to Sunday, 4 January 2004. Этот стиль нумерации обычно используется в странах и регионах Европы.European countries / regions typically use this style of numbering. В других странах он применяется редко.Non-European countries / regions typically do not use it.

Примечание. Наибольшее число недель в году может составлять 52 или 53.Note: the highest week number in a year could be either 52 or 53.

Система отсчета недель в разных странах и регионах может не совпадать со стандартом ISO.The numbering systems of different countries/regions might not comply with the ISO standard. В таблице ниже представлено шесть возможных вариантов.This table shows six possibilities:

Первый день неделиFirst day of week Содержание первой недели годаFirst week of year contains Двойное присвоение недельWeeks assigned two times Применяется в:Used by/in
ВоскресеньеSunday 1 января,1 January,

Первая суббота,First Saturday,

1–7 дней года1–7 days of year
ДаYes United StatesUnited States
ПонедельникMonday 1 января,1 January,

Первое воскресенье,First Sunday,

1–7 дней года1–7 days of year
ДаYes Большинство стран Европы, а также ВеликобританияMost of Europe and the United Kingdom
ПонедельникMonday 4 января,4 January,

Первый четвергFirst Thursday,

4–7 дней года4–7 days of year
нетNo ISO 8601, Норвегия и ШвецияISO 8601, Norway, and Sweden
ПонедельникMonday 7 января,7 January,

Первый понедельникFirst Monday,

7 дней года7 days of year
нетNo
СредаWednesday 1 января,1 January,

Первый вторник,First Tuesday,

1–7 дней года1–7 days of year
ДаYes
СубботаSaturday 1 января,1 January,

Первая пятница,First Friday,

1–7 дней года1–7 days of year
ДаYes

TZoffsetTZoffset

DATEPART возвращает значение TZoffset (tz) как количество минут (со знаком).DATEPART returns the TZoffset (tz) value as the number of minutes (signed). В результате выполнения этой инструкции возвращается смещение часового пояса 310 минут:This statement returns a time zone offset of 310 minutes:

SELECT DATEPART (TZoffset, '2007-05-10  00:00:01.1234567 +05:10');  

Функция DATEPART отображает значение TZoffset описанным ниже образом.DATEPART renders the TZoffset value as follows:

  • Для datetimeoffset и datetime2 значение TZoffset возвращает временное смещение в минутах, причем для datetime2 смещение всегда равно 0 минут.For datetimeoffset and datetime2, TZoffset returns the time offset in minutes, where the offset for datetime2 is always 0 minutes.
  • Для типов данных, которые могут быть неявно преобразованы в datetimeoffset или datetime2, функция DATEPART возвращает временное смещение в минутах.For data types that can implicitly convert to datetimeoffset or datetime2, DATEPART returns the time offset in minutes. Для остальных типов даты и времени этого не происходит.Exception: other date / time data types.
  • Для параметров любых других типов возвращается ошибка.Parameters of all other types result in an error.

Аргумент даты типа smalldatetimesmalldatetime date Argument

Для значения date типа smalldatetime функция DATEPART возвращает количество секунд 00.For a smalldatetime date value, DATEPART returns seconds as 00.

Возвращается значение по умолчанию для аргумента функции datepart, который отличен от датыDefault Returned for a datepart That Is Not in a date Argument

Если тип данных аргумента date не содержит указанной части datepart, функция DATEPART вернет значение по умолчанию для этой части datepart, только если для date указан литерал.If the date argument data type does not have the specified datepart, DATEPART will return the default for that datepart only when a literal is specified for date.

Например, значение "год-месяц-день" по умолчанию для любого типа данных date равно 1900-01-01.For example, the default year-month-day for any date data type is 1900-01-01. Приведенная ниже инструкция содержит аргументы компонентов даты для datepart, аргумент времени для date и возвращает 1900, 1, 1, 1, 2.This statement has date part arguments for datepart, a time argument for date, and it returns 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, функция DATEPART возвращает ошибку 9810.If date is specified as a variable or table column, and the data type for that variable or column does not have the specified datepart, DATEPART will return error 9810. В этом примере переменная @t имеет тип данных time.In this example, variable @t has a time data type. Этот пример завершается ошибкой, потому что год даты не является допустимым для типа данных time:The example fails because the date part year is invalid for the time data type:

DECLARE @t time = '12:10:30.123';   
SELECT DATEPART(year, @t);  

Доли секундыFractional seconds

Эти инструкции демонстрируют, что функция DATEPART возвращает доли секунды:These statements show that DATEPART returns fractional seconds:

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  

RemarksRemarks

Функция DATEPART может использоваться в предложениях выбора из списка, WHERE, HAVING, GROUP BY и ORDER BY.DATEPART can be used in the select list, WHERE, HAVING, GROUP BY, and ORDER BY clauses.

В SQL Server 2017SQL Server 2017 функция DATEPART неявно приводит строковые литералы к типу datetime2.DATEPART implicitly casts string literals as a datetime2 type in SQL Server 2017SQL Server 2017. Это означает, что DATENAME не поддерживает формат ГЧМ (год, число, месяц) при передаче даты в виде строки.This means that DATENAME does not support the format YDM when the date is passed as a string. Для использования формата ГЧМ (год, число, месяц) необходимо явно привести строку к типу datetime или smalldatetime.You must explicitly cast the string to a datetime or smalldatetime type to use the YDM format.

ПримерыExamples

В этом примере возвращается базовый год.This example returns the base year. Его значение используется при расчетах, связанных с датами.The base year helps with date calculations. В примере дата указана как число.In the example, a number specifies the date. Обратите внимание на то, что SQL ServerSQL Server интерпретирует 0 как 1 января 1900 г.Notice that SQL ServerSQL Server interprets 0 as January 1, 1900.

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

В приведенном ниже примере возвращается часть даты 12/20/1974, представляющая день.This example returns the day part of the date 12/20/1974.

-- Uses AdventureWorks  

SELECT TOP(1) DATEPART (day,'12/20/1974') FROM dbo.DimCustomer;  

Ниже приводится результирующий набор.Here is the result set.

--------
20

В приведенном ниже примере возвращается часть даты 12/20/1974, представляющая год.This example returns the year part of the date 12/20/1974.

-- Uses AdventureWorks  

SELECT TOP(1) DATEPART (year,'12/20/1974') FROM dbo.DimCustomer;  

Ниже приводится результирующий набор.Here is the result set.

--------
1974

См. также разделSee also

Функции CAST и CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)