date (Transact-SQL)

Définit une date.

Description de date

Propriété

Valeur

Syntaxe

date

Utilisation

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 » qui suit.

Plage

0001-01-01 à 9999-12-31

Du 1er janvier de l'an 1 au 31 décembre 9999

Plages d'éléments

AAAA comprend quatre chiffres, entre 0001 et 9999, qui représentent une année.

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

DD comprend deux chiffres, 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. Utilisez l'Configurer l'option de configuration du serveur two digit year cutoff 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.

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 de coupure appartient au siècle qui précède l'année de coupure. 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 ydm n'est pas pris en charge pour date.

Alphabétique

Description

mois [jj][,] aaaa      

mois jj[,] [aa]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. Il s'agit du seul format qui est défini comme une 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.

Fonctionne dans SQL Server 2012 comme dans SQL Server 2005.

Format XML W3C

Description

aaaa-mm-jjTZD      

Spécifiquement pris en charge pour une utilisation 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. Cela indique si le décalage de fuseau horaire est ajouté au temps universel coordonné ou soustrait de celui-ci pour obtenir l'heure locale. 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 à 9999–12–31 CE. »

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

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 2012

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

YYYY-MM-DD hh:mm:ss[. nnnnnnn]

SQL_WVARCHAR ou SQL_VARCHAR

DBTYPE_WSTR ou DBTYPE_STR

Java.sql.String

String ou SqString

datetimeoffset

YYYY-MM-DD 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 de date et d'heure

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

Conversion de date en d'autres types de date et d'heure

Le tableau suivant décrit ce qui se produit lorsqu'un type de données date est converti en d'autres types de données de date et d'heure.

Type de données vers lequel effectuer la conversion

Détails de conversion

time(n)

La conversion échoue et le message d'erreur 206 est généré : « Conflit de types d'opérande : date est incompatible avec time ».

datetime

La date est copiée et le composant heure est défini sur 00:00:00.000. 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)

smalldatetime

Lorsque la valeur de date est comprise dans la plage d'un smalldatetime, le composant date est copié et le composant time est défini sur 00:00:00. Quand la valeur date est en dehors de la plage d'une valeur smalldatetime, le message d'erreur 242 est généré : « La conversion d'un type de données date en type de données smalldatetime a créé une valeur hors limites ; et la valeur de smalldatetime est 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)

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)

datetime2(n)

Le composant date est copié et le composant heure est défini sur 00:00:00.00, quelle que soit la valeur de (n).

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.00
--
--(1 row(s) affected)

Conversion de littéraux de chaîne en date

Les conversions de littéraux de chaîne en types de date et d'heure sont autorisées si toutes les parties des chaînes sont dans des formats valides. Sinon, une erreur d'exécution est déclenchée. Les conversions implicites ou explicites qui ne spécifient pas de style à partir de types de date et d'heure en littéraux de chaîne seront 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 sur le 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 ce type, comme 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 l'ensemble des résultats.

Type de données

Sortie

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

Voir aussi

Référence

CAST et CONVERT (Transact-SQL)