date (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

Définit une date dans SQL Server.

Description de date

Propriété Valeur
Syntaxe date
Usage DECLARE @MyDate date

CREATE TABLE Table1 ( Column1 date )
Format de littéral de chaîne par défaut

(utilisé pour le client de bas niveau)
AAAA-MM-JJ

Pour plus d’informations, consultez la section « Compatibilité descendante pour les clients de bas niveau » ci-dessous.
Plage 0001-01-01 à 9999-12-31 (1582-10-15 à 9999-12-31 pour Informatica)

Du 1er janvier de l’an 1 (de notre ère) au 31 décembre 9999 (du 15 octobre 1582 au 31 décembre 9999 pour Informatica)
Plages d'éléments AAAA comprend quatre chiffres, entre 0001 et 9999, qui représentent une année. Pour Informatica, AAAA se limite à la plage 1582 à 9999.

MM comprend deux chiffres, entre 01 et 12, qui représentent un mois de l'année spécifiée.

JJ correspond à deux chiffres compris entre 01 et 31, selon le mois, qui représentent un jour du mois spécifié.
Longueur de caractère 10 positions
Précision, échelle 10, 0
Taille de stockage 3 octets, fixe
Structure de stockage Un entier sur 1 ou 3 octets stocke la date.
Précision Un jour
Valeur par défaut 1900-01-01

Cette valeur est utilisée pour la partie date ajoutée pour la conversion implicite de time en datetime2 ou datetimeoffset.
Calendrier Grégorien
Précision à la fraction de seconde définie par l'utilisateur Non
Prise en charge et conservation du décalage de fuseau horaire Non
Prise en charge de l'heure d'été Non

Formats de littéraux de chaîne pris en charge pour date

Les tableaux suivants affichent les formats de littéraux de chaîne valides pour le type de données date.

Numérique Description
mja

[m]m/jj/[aa]aa

[m]m-jj-[aa]aa

[m]m.jj.[aa]aa

maj

mm/[aa]aa/jj

mm-[aa]aa/jj

[m]m.[aa]aa.jj

jma

jj/[m]m/[aa]aa

jj-[m]m-[aa]aa

jj.[m]m.[aa]aa

jam

jj/[aa]aa/[m]m

jj-[aa]aa-[m]m

jj.[aa]aa.[m]m

amj

[aa]aa/[m]m/jj

[aa]aa-[m]m-jj

[aa]aa-[m]m-jj
[m]m, jj et [aa]aa représentent le mois, le jour et l'année dans une chaîne qui utilise des barres obliques (/), des traits d'union (-) ou des points (.) comme séparateurs.

Seules les années à deux ou quatre chiffres sont prises en charge. Utilisez des années à quatre chiffres chaque fois que possible. Pour spécifier un entier compris entre 0001 et 9999 qui représente l’année de coupure permettant d’interpréter les années à deux chiffres comme des années à quatre chiffres, utilisez Configurer l’option de configuration de serveur two digit year cutoff.

Remarque : Pour Informatica, AAAA se limite à la plage 1582 à 9999.

Une année à deux chiffres inférieure ou égale aux deux derniers chiffres de l'année de coupure appartient au même siècle que l'année de coupure. Une année à deux chiffres supérieure aux deux derniers chiffres de l'année charnière appartient au siècle précédant cette année charnière. Par exemple, si l'année de coupure à deux chiffres est l'année par défaut 2049, l'année à deux chiffres 49 est interprétée comme étant 2049 et l'année 50 comme étant 1950

Le format de date par défaut est déterminé par le paramètre de langue actuel. Vous pouvez modifier le format de date à l’aide des instructions SET LANGUAGE et SET DATEFORMAT.

Le format ajm n’est pas pris en charge pour date.
Alphabétique Description
mois [jj][,] aaaa

mois jj[,] [aa]

mois aaaa [jj]

[jj] mois[,] aaaa

jj mois[,][aa]aa

jj [aa]aa mois

[jj] aaaa mois

aaaa mois [jj]

aaaa [jj] mois
mon représente le nom complet du mois ou son abréviation dans le langage actuel. Les virgules sont facultatives et les majuscules sont ignorées.

Pour éviter toute ambiguïté, représentez les années à l'aide de quatre chiffres.

Si le jour n'est pas précisé, le premier jour du mois est rajouté.
ISO 8601 Description
AAAA-MM-JJ

AAAAMMJJ
Identique à la norme SQL. C’est le seul format qui soit défini comme norme internationale.
Non séparé Description
[aa]aammjj

aaaa[mm][jj]
Les données de date peuvent être spécifiées avec quatre, six ou huit chiffres. Une chaîne de six ou huit chiffres est toujours interprétée comme ymd. Le jour et le mois doivent toujours comporter deux chiffres. Une chaîne de quatre chiffres est interprétée comme l'année.
ODBC Description
{ d 'aaaa-mm-jj' } Spécifique à l'API ODBC.
Format XML W3C Description
aaaa-mm-jjTZD Pris en charge pour l’utilisation de XML/SOAP.

TZD est l'indicateur de fuseau horaire (Z ou +hh:mm ou -hh:mm) :

- hh:mm représente le décalage de fuseau horaire. hh comprend deux chiffres, entre 0 et 14, qui représentent le nombre d'heures dans le décalage de fuseau horaire.
- MM comprend deux chiffres, entre 0 et 59, qui représentent le nombre de minutes supplémentaires dans le décalage de fuseau horaire.
- + (plus) ou - (moins) est le signe obligatoire du décalage de fuseau horaire. Ce signe indique si, pour obtenir l'heure locale, le décalage de fuseau horaire est ajouté au temps universel coordonné (UTC) ou en est soustrait. La plage valide du décalage de fuseau horaire se situe entre -14:00 et +14:00.

Conformité ANSI et ISO 8601

date est conforme à la définition de la norme SQL ANSI pour le calendrier grégorien : « NOTE 85 - Les types de données Datetime autorisent le stockage des dates au format grégorien dans la plage 0001-01-01 CE à 9999–12–31 CE. »

Le format de littéral de chaîne par défaut, utilisé pour les clients de bas niveau, respecte le format standard SQL, défini comme AAAA-MM-JJ. Ce format est le même que la définition ISO 8601 pour DATE.

Notes

Pour Informatica, la plage s’étend du 1582-10-15 (15 octobre 1582) au 9999-12-31 (31 décembre 9999).

Compatibilité descendante pour les clients de bas niveau

Certains clients de bas niveau ne prennent pas en charge les types de données time, date, datetime2 et datetimeoffset. Le tableau suivant présente le type de mappage entre une instance de haut niveau de SQL Server et des clients de bas niveau.

Type de données SQL Server Format de littéral de chaîne par défaut passé au client de bas niveau ODBC de bas niveau OLEDB de bas niveau JDBC de bas niveau SQLCLIENT de bas niveau
time hh:mm:ss [.nnnnnnn] SQL_WVARCHAR ou SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STR Java.sql.String String ou SqString
date AAAA-MM-JJ SQL_WVARCHAR ou SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STR Java.sql.String String ou SqString
datetime2 AAAA-MM-JJ hh:mm:ss[.nnnnnnn] SQL_WVARCHAR ou SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STR Java.sql.String String ou SqString
datetimeoffset AAAA-MM-JJ hh:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR ou SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STR Java.sql.String String ou SqString

Conversion de données date et time

En cas de conversion vers des types de données date et time, SQL Server rejette toutes les valeurs qu'il ne peut identifier comme date ou time. Pour plus d’informations sur l’utilisation des fonctions CAST et CONVERT avec des données date et heure, consultez CAST et CONVERT (Transact-SQL).

Conversion de date en d’autres types de données date et time

Cette section décrit ce qui se produit quand un type de données date est converti en d’autres types de données date et time.

Dans le cas d’une conversion en time(n) , la conversion échoue et le message d’erreur 206 est généré : « Conflit de types d’opérandes : date est incompatible avec time ».

Dans le cas d’une conversion en datetime, la date est copiée. Le code suivant montre les résultats de la conversion d'une valeur date en valeur datetime.

DECLARE @date date= '12-10-25';  
DECLARE @datetime datetime= @date;  
  
SELECT @date AS '@date', @datetime AS '@datetime';  
  
--Result  
--@date      @datetime  
------------ -----------------------  
--2025-12-10 2025-12-10 00:00:00.000  
--  
--(1 row(s) affected)  

Dans le cas d’une conversion en smalldatetime, quand la valeur date est comprise dans la plage d’une valeur smalldatetime, le composant date est copié et le composant heure défini sur 00:00:00.000. Quand la valeur date est en dehors de la plage d’une valeur smalldatetime, le message d’erreur 242 est généré : « The conversion of a date data type to a smalldatetime data type resulted in an out-of-range value », et la valeur smalldatetime est définie sur NULL. Le code suivant montre les résultats de la conversion d'une valeur date en valeur smalldatetime.

DECLARE @date date= '1912-10-25';  
DECLARE @smalldatetime smalldatetime = @date;  
  
SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';  
  
--Result  
--@date      @smalldatetime  
------------ -----------------------  
--1912-10-25 1912-10-25 00:00:00  
--  
--(1 row(s) affected)  

Dans le cas d’une conversion en datetimeoffset(n) , la date est copiée et l’heure est définie sur 00:00.0000000 +00:00. Le code suivant montre les résultats de la conversion d'une valeur date en valeur datetimeoffset(3).

DECLARE @date date = '1912-10-25';  
DECLARE @datetimeoffset datetimeoffset(3) = @date;  
  
SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';  
  
--Result  
--@date      @datetimeoffset  
------------ ------------------------------  
--1912-10-25 1912-10-25 00:00:00.000 +00:00  
--  
--(1 row(s) affected)  

Dans le cas d’une conversion en datetime2(n) , le composant date est copié et le composant heure est défini sur 00:00.000000. Le code suivant montre les résultats de la conversion d'une valeur date en valeur datetime2(3).

DECLARE @date date = '1912-10-25'  
DECLARE @datetime2 datetime2(3) = @date;  
  
SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';  
  
--Result  
--@date      @datetime2(3)  
------------ -----------------------  
--1912-10-25 1912-10-25 00:00:00.000  
--  
--(1 row(s) affected)  

Conversion de littéraux de chaîne en date

Les conversions de littéraux de chaîne en types date et time sont autorisées si toutes les parties des chaînes ont un format valide. Sinon, une erreur d'exécution est déclenchée. Les conversions implicites ou explicites de types date et time en littéraux de chaîne qui ne spécifient pas de style se font au format par défaut de la session active. Le tableau suivant montre les règles de conversion d’un littéral de chaîne en type de données date.

Littéral de chaîne d'entrée date
ODBC DATE Les littéraux de chaîne ODBC sont mappés au type de données datetime. Toute opération d’affectation de littéraux ODBC DATETIME en un type date provoque une conversion implicite entre datetime et le type défini par les règles de conversion.
ODBC TIME Consultez la règle DATE ODBC précédente.
ODBC DATETIME Consultez la règle DATE ODBC précédente.
DATE uniquement Simple
TIME uniquement Les valeurs par défaut sont fournies.
TIMEZONE uniquement Les valeurs par défaut sont fournies.
DATE + TIME La partie DATE de la chaîne d'entrée est utilisée.
DATE + TIMEZONE Non autorisé.
TIME + TIMEZONE Les valeurs par défaut sont fournies.
DATE + TIME + TIMEZONE La partie DATE du DATETIME local sera utilisée.

Exemples

L'exemple suivant compare les résultats de la conversion d'une chaîne en chaque type de données de date et d'heure.

SELECT   
     CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time'   
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date'   
    ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS   
        'smalldatetime'   
    ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime'   
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS   
        'datetime2'  
    ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS   
        'datetimeoffset';  

Voici le jeu de résultats obtenu.

Type de données Output
time 12:35:29. 1234567
date 2007-05-08
smalldatetime 2007-05-08 12:35:00
datetime 2007-05-08 12:35:29.123
datetime2 2007-05-08 12:35:29.1234567
datetimeoffset 2007-05-08 12:35:29.1234567 +12:15

Introduite pour la première fois dans SQL Server 2008.

Voir aussi

CAST et CONVERT (Transact-SQL)