DATEPART (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Cette fonction retourne un entier représentant la valeur datepart spécifiée de la date spécifiée.
Pour obtenir une vue d’ensemble de tous les types de données et toutes les fonctions de date et d’heure Transact-SQL, consultez Types de données et fonctions de date et d’heure (Transact-SQL).
Conventions de la syntaxe Transact-SQL
Syntaxe
DATEPART ( datepart , date )
Arguments
datepart
Partie spécifique de l’argument date pour lequel DATEPART
retourne une valeur de type integer. Ce tableau répertorie tous les arguments datepart valides.
Notes
DATEPART
n’accepte pas d’équivalents de variables définis par l’utilisateur pour les arguments datepart.
datepart | Abréviations |
---|---|
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
Expression qui est résolue en l’un des types de données suivants :
- date
- datetime
- datetimeoffset
- datetime2
- smalldatetime
- time
Pour date, DATEPART
accepte une expression de colonne, une expression, un littéral de chaîne ou une variable définie par l’utilisateur. Pour éviter toute ambiguïté, utilisez des années à quatre chiffres. Pour obtenir des informations sur les années à deux chiffres, consultez Configurer l’option de configuration du serveur two digit year cutoff.
Type de retour
int
Valeur de retour
Chaque datepart et ses abréviations retournent la même valeur.
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. La valeur retournée dépend de SET DATEFORMAT si date est un littéral de chaîne de certains 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.
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')
. L’argument date a le type de données datetimeoffset(7) . Les deux dernières positions de la valeur de retour nanosecond datepart sont toujours 00
et cette valeur a une échelle de 9 :
.123456700
datepart | Valeur retournée |
---|---|
year, yyyy, yy | 2007 |
quarter, qq, q | 4 |
month, mm, m | 10 |
dayofyear, dy, y | 303 |
day, dd, d | 30 |
week, wk, ww | 44 |
weekday, dw | 3 |
hour, hh | 12 |
minute, n | 15 |
second, ss, s | 32 |
millisecond, ms | 123 |
microsecond, mcs | 123456 |
nanosecond, ns | 123456700 |
tzoffset, tz | 310 |
iso_week, isowk, isoww | 44 |
Arguments des parties de date semaine et jour ouvrable
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.
Le 1er janvier d’une année définit le numéro de départ de week datepart. Par exemple :
DATEPART (wk, 'Jan 1, xxxx') = 1
où xxxx représente une année.
Ce tableau montre la valeur de retour pour week et weekday datepart pour la valeur '2007-04-21' de chaque argument SET DATEFIRST. Le 1er janvier 2007 tombe un lundi. Le 21 avril 2007 tombe un samedi. Pour l’anglais des États-Unis,
SET DATEFIRST 7 -- ( Sunday )
est utilisée comme valeur par défaut. Après avoir défini DATEFIRST, utilisez l’instruction SQL suggérée suivante pour les valeurs de table datepart :
SELECT DATEPART(week, '2007-04-21 '), DATEPART(weekday, '2007-04-21 ')
SET DATEFIRST argument |
week retourné |
weekday retourné |
---|---|---|
1 | 16 | 6 |
2 | 17 | 5 |
3 | 17 | 4 |
4 | 17 | 3 |
5 | 17 | 2 |
6 | 17 | 1 |
7 | 16 | 7 |
Arguments des parties de date année, mois et jour
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.
Partie de date iso_week
ISO 8601 inclut le système semaine-date ISO, un système de numérotation pour les semaines. Chaque semaine est associée à l'année dans laquelle jeudi se produit. Par exemple, la semaine 1 de 2004 (2004W01) couvrait la période du lundi 29 décembre 2003 au dimanche 4 janvier 2004. Les pays européens/régions européennes utilisent généralement ce type de numérotation. Il n’est généralement pas utilisé dans les pays ou régions en dehors de l’Europe.
Remarque : Le numéro de semaine le plus élevé dans une année peut être 52 ou 53.
Les systèmes de numérotation des différents pays peuvent ne pas se conformer à la norme ISO. Le tableau suivant présente six possibilités :
Premier jour de la semaine | La première semaine de l'année contient | Semaines assignées deux fois | Utilisé par/dans |
---|---|---|---|
Dimanche | 1er janvier, Premier samedi, 1 à 7 jours de l’année |
Oui | États-Unis |
Lundi | 1er janvier, Premier dimanche, 1 à 7 jours de l’année |
Oui | Majorité de l'Europe et Royaume-Uni |
Lundi | 4 janvier Premier jeudi, 4 à 7 jours de l’année |
Non | ISO 8601, Norvège et Suède |
Lundi | 7 janvier, Premier lundi, Sept jours de l’année |
Non | |
Mercredi | 1er janvier, Premier mardi, 1 à 7 jours de l’année |
Oui | |
Samedi | 1er janvier, Premier vendredi, 1 à 7 jours de l’année |
Oui |
tzoffset
DATEPART
retourne la valeur tzoffset (tz) sous la forme du nombre de minutes (signé). L’instruction suivante retourne un décalage de fuseau horaire de 310 minutes :
SELECT DATEPART (tzoffset, '2007-05-10 00:00:01.1234567 +05:10');
DATEPART
restitue la valeur tzoffset comme suit :
- Pour datetimeoffset et datetime2, tzoffset retourne le décalage horaire en minutes, où le décalage pour datetime2 s’élève toujours à 0 minute.
- Pour les types de données qui peuvent implicitement être convertis en datetimeoffset ou datetime2,
DATEPART
retourne le décalage horaire en minutes. Exception : autre types de données de date/heure. - Les paramètres de tous les autres types génèrent une erreur.
Argument date smalldatetime
Pour une valeur date smalldatetime, DATEPART
retourne les secondes sous la forme 00.
Valeur par défaut retournée pour une partie de date qui ne figure pas dans un argument date
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.
Par exemple, la combinaison année-mois-jour par défaut pour tout type de données date est 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
.
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. Dans l’exemple suivant, la variable @t a le type de donnéesheure. L’exemple échoue car la partie année de la date n’est pas valide pour le type de données time :
DECLARE @t time = '12:10:30.123';
SELECT DATEPART(year, @t);
Fractions de seconde
Les instructions suivantes montrent que DATEPART
retourne des fractions de seconde :
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
DATEPART
peut être utilisé dans la liste de sélection et les clauses WHERE, HAVING, GROUP BY et ORDER BY.
DATEPART caste implicitement des littéraux de chaîne en type datetime2 dans SQL Server 2008 (10.0.x) et versions ultérieures. Cela signifie que DATENAME ne prend pas en charge le format YDM lorsque la date est transmise en tant que chaîne. Vous devez caster explicitement la chaîne en type datetime ou smalldatetime pour utiliser le format AJM.
Exemples
L’exemple suivant retourne l’année de base. L’année de base permet d’effectuer des calculs de date. Dans l’exemple, un nombre spécifie la date. Notez que SQL Server interprète 0 comme représentant le 1er janvier 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
.
-- Uses AdventureWorks
SELECT TOP(1) DATEPART (day,'12/20/1974') FROM dbo.DimCustomer;
-- Returns: 20
L’exemple suivant retourne la partie année de la date 12/20/1974
.
-- Uses AdventureWorks
SELECT TOP(1) DATEPART (year,'12/20/1974') FROM dbo.DimCustomer;
-- Returns: 1974