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

S’APPLIQUE À : ouiSQL Server (à partir de 2008) ouiAzure SQL Database ouiAzure SQL Data Warehouse ouiParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Cette fonction retourne un entier représentant la valeur datepart spécifiée de la date spécifiée.This function returns an integer representing the specified datepart of the specified date.

Pour obtenir une vue d’ensemble de tous les types de données et fonctions de date et d’heure Transact-SQLTransact-SQL, consultez Types de données et fonctions de date et d’heure (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.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

DATEPART ( datepart , date )  

ArgumentsArguments

datepartdatepart
Partie spécifique de l’argument date pour lequel DATEPART retourne une valeur de type integer.The specific part of the date argument for which DATEPART will return an integer. Ce tableau répertorie tous les arguments datepart valides.This table lists all valid datepart arguments.

Notes

DATEPART n’accepte pas d’équivalents de variables définis par l’utilisateur pour les arguments datepart.DATEPART does not accept user-defined variable equivalents for the datepart arguments.

datepartdatepart AbréviationsAbbreviations
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 hhhh
minuteminute mi, nmi, n
secondsecond ss, sss, s
millisecondmillisecond msms
microsecondmicrosecond mcsmcs
nanosecondnanosecond nsns
TZoffsetTZoffset tztz
ISO_WEEKISO_WEEK isowk, isowwisowk, isoww

datedate
Expression qui est résolue en l’un des types de données suivants :An expression that resolves to one of the following data types:

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

Pour date, DATEPART accepte une expression de colonne, une expression, un littéral de chaîne ou une variable définie par l’utilisateur.For date, DATEPART will accept a column expression, expression, string literal, or user-defined variable. Pour éviter toute ambiguïté, utilisez des années à quatre chiffres.Use four-digit years to avoid ambiguity issues. Pour obtenir des informations sur les années à deux chiffres, consultez Configurer l’option de configuration du serveur two digit year cutoff.See Configure the two digit year cutoff Server Configuration Option for information about two-digit years.

Type de retourReturn Type

Intint

Valeur retournéeReturn Value

Chaque datepart et ses abréviations retournent la même valeur.Each datepart and its abbreviations return the same value.

La valeur retournée dépend de l’environnement de langue défini à l’aide de SET LANGUAGE et de l’option de configuration de serveur Configurer la langue par défaut de la connexion.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. La valeur retournée dépend de SET DATEFORMAT si date est un littéral de chaîne de certains formats.The return value depends on SET DATEFORMAT if date is a string literal of some formats. SET DATEFORMAT ne change pas la valeur de retour quand la date est une expression de colonne d’un type de données de date ou d’heure.SET DATEFORMAT does not change the return value when the date is a column expression of a date or time data type.

Le tableau suivant répertorie tous les arguments datepart, avec les valeurs retournées correspondantes, pour l’instruction 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'). L’argument date a le type de données datetimeoffset(7).The date argument has a datetimeoffset(7) data type. Les deux dernières positions de la valeur de retour nanosecond datepart sont toujours 00 et cette valeur a une échelle de 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 Valeur retournéeReturn value
year, yyyy, yyyear, yyyy, yy 20072007
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

Arguments des parties de date semaine et jour ouvrableWeek and weekday datepart arguments

Pour un argument datepart ayant la valeur week (wk, ww) ou weekday (dw), la valeur de retour DATEPART dépend de la valeur définie par SET DATEFIRST.For a week (wk, ww) or weekday (dw) datepart, the DATEPART return value depends on the value set by SET DATEFIRST.

Le 1er janvier d’une année définit le numéro de départ de weekdatepart.January 1 of any year defines the starting number for the weekdatepart. Exemple :For example:

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

xxxx représente une année.where xxxx is any year.

Le tableau suivant montre la valeur de retour pour l’argument datepart week et weekday pour la valeurThis table shows the return value for the week and weekday datepart for

« 2007-04-21 »'2007-04-21 '

pour chaque argument de SET DATEFIRST.for each SET DATEFIRST argument. Le 1er janvier 2007 tombe un lundi.January 1, 2007 falls on a Monday. Le 21 avril 2007 tombe un samedi.April 21, 2007 falls on a Saturday. Pour l’anglais des États-Unis,For U.S. English,

SET DATEFIRST 7 -- ( Sunday )SET DATEFIRST 7 -- ( Sunday )

est utilisée comme valeur par défaut.serves as the default. Après avoir défini DATEFIRST, utilisez l’instruction SQL suggérée suivante pour les valeurs de table 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

argumentargument
weekweek

retournéreturned
weekdayweekday

retournéreturned
11 1616 66
22 1717 55
33 1717 44
44 1717 33
55 1717 22
66 1717 11
77 1616 77

Arguments des parties de date année, mois et jouryear, month, and day datepart Arguments

Les valeurs retournées pour DATEPART (year, date), DATEPART (month, date) et DATEPART (day, date) sont les mêmes que celles retournées par les fonctions YEAR, MONTH et DAY, respectivement.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.

Partie de date ISO_WEEKISO_WEEK datepart

ISO 8601 inclut le système semaine-date ISO, un système de numérotation pour les semaines.ISO 8601 includes the ISO week-date system, a numbering system for weeks. Chaque semaine est associée à l'année dans laquelle jeudi se produit.Each week is associated with the year in which Thursday occurs. Par exemple, la semaine 1 de 2004 (2004W01) couvrait la période du lundi 29 décembre 2003 au dimanche 4 janvier 2004.For example, week 1 of 2004 (2004W01) covered Monday, 29 December 2003 to Sunday, 4 January 2004. En général, les pays européens utilisent ce style de numérotation,European countries / regions typically use this style of numbering. ce qui n’est normalement pas le cas des autres pays.Non-European countries / regions typically do not use it.

Remarque : Le numéro de semaine le plus élevé dans une année peut être 52 ou 53.Note: the highest week number in a year could be either 52 or 53.

Les systèmes de numérotation des différents pays peuvent ne pas se conformer à la norme ISO.The numbering systems of different countries/regions might not comply with the ISO standard. Le tableau suivant présente six possibilités :This table shows six possibilities:

Premier jour de la semaineFirst day of week La première semaine de l'année contientFirst week of year contains Semaines assignées deux foisWeeks assigned two times Utilisé par/dansUsed by/in
DimancheSunday 1er janvier,1 January,

Premier samedi,First Saturday,

1 à 7 jours de l’année1-7 days of year
OuiYes United StatesUnited States
LundiMonday 1er janvier,1 January,

Premier dimanche,First Sunday,

1 à 7 jours de l’année1-7 days of year
OuiYes Majorité de l'Europe et Royaume-UniMost of Europe and the United Kingdom
LundiMonday 4 janvier4 January,

Premier jeudi,First Thursday,

4 à 7 jours de l’année4-7 days of year
NonNo ISO 8601, Norvège et SuèdeISO 8601, Norway, and Sweden
LundiMonday 7 janvier,7 January,

Premier lundi,First Monday,

7 jours de l'année7 days of year
NonNo
MercrediWednesday 1er janvier,1 January,

Premier mardi,First Tuesday,

1 à 7 jours de l’année1-7 days of year
OuiYes
SamediSaturday 1er janvier,1 January,

Premier vendredi,First Friday,

1 à 7 jours de l’année1-7 days of year
OuiYes

TZoffsetTZoffset

DATEPART retourne la valeur TZoffset (tz) sous la forme du nombre de minutes (signé).DATEPART returns the TZoffset (tz) value as the number of minutes (signed). L’instruction suivante retourne un décalage de fuseau horaire de 310 minutes :This statement returns a time zone offset of 310 minutes:

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

DATEPART restitue la valeur TZoffset comme suit :DATEPART renders the TZoffset value as follows:

  • Pour datetimeoffset et datetime2, TZoffset retourne le décalage horaire en minutes, où le décalage pour datetime2 s’élève toujours à 0 minutes.For datetimeoffset and datetime2, TZoffset returns the time offset in minutes, where the offset for datetime2 is always 0 minutes.
  • Pour les types de données qui peuvent implicitement être convertis en datetimeoffset ou datetime2, DATEPART retourne le décalage horaire en minutes.For data types that can implicitly convert to datetimeoffset or datetime2, DATEPART returns the time offset in minutes. Exception : autre types de données de date/heure.Exception: other date / time data types.
  • Les paramètres de tous les autres types génèrent une erreur.Parameters of all other types result in an error.

Argument date smalldatetimesmalldatetime date Argument

Pour une valeur date smalldatetime, DATEPART retourne les secondes sous la forme 00.For a smalldatetime date value, DATEPART returns seconds as 00.

Valeur par défaut retournée pour une partie de date qui ne figure pas dans un argument dateDefault Returned for a datepart That Is Not in a date Argument

Si le type de données de l’argument date n’a pas l’argument datepart spécifié, DATEPART retourne la valeur par défaut pour ce datepart uniquement lors de la spécification d’un littéral pour 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.

Par exemple, la combinaison année-mois-jour par défaut pour tout type de données date est 1900-01-01.For example, the default year-month-day for any date data type is 1900-01-01. L’instruction suivante a des arguments de partie de date pour datepart, un argument d’heure pour date, et elle retourne 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');  

Si l’argument date est spécifié comme variable ou colonne de table, et que cette variable ou colonne n’a pas l’argument datepart spécifié, DATEPART retourne l’erreur 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. Dans l’exemple suivant, la variable *@t* a le type de donnéestime.In this example, variable *@t* has a time data type. L’exemple échoue car la partie année de la date n’est pas valide pour le type de données 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);  

Fractions de secondeFractional seconds

Les instructions suivantes montrent que DATEPART retourne des fractions de seconde :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  

Notes Remarks

DATEPART peut être utilisé dans la liste de sélection et les clauses WHERE, HAVING, GROUP BY et ORDER BY.DATEPART can be used in the select list, WHERE, HAVING, GROUP BY, and ORDER BY clauses.

DATEPART caste implicitement des littéraux de chaîne en type datetime2 dans SQL Server 2017SQL Server 2017.DATEPART implicitly casts string literals as a datetime2 type in SQL Server 2017SQL Server 2017. Cela signifie que DATENAME ne prend pas en charge le format YDM lorsque la date est transmise en tant que chaîne.This means that DATENAME does not support the format YDM when the date is passed as a string. Vous devez caster explicitement la chaîne en type datetime ou smalldatetime pour utiliser le format AJM.You must explicitly cast the string to a datetime or smalldatetime type to use the YDM format.

ExemplesExamples

L’exemple suivant retourne l’année de base.This example returns the base year. L’année de base permet d’effectuer des calculs de date.The base year helps with date calculations. Dans l’exemple, un nombre spécifie la date.In the example, a number specifies the date. Notez que SQL ServerSQL Server interprète 0 comme représentant le 1er janvier 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 */  

L’exemple suivant retourne la partie jour de la date 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;  

Voici l'ensemble des résultats.Here is the result set.

--------
20

L’exemple suivant retourne la partie année de la date 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;  

Voici l'ensemble des résultats.Here is the result set.

--------
1974

Voir aussiSee also

CAST et CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)