date (Transact-SQL)date (Transact-SQL)

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database ouiAzure SQL Data Warehouse ouiParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Définit une date dans SQL ServerSQL Server.Defines a date in SQL ServerSQL Server.

Description de datedate description

PropriétéProperty ValeurValue
SyntaxeSyntax datedate
UtilisationUsage DECLARE @MyDate dateDECLARE @MyDate date

CREATE TABLE Table1 ( Column1 date )CREATE TABLE Table1 ( Column1 date )
Format de littéral de chaîne par défautDefault string literal format

(utilisé pour le client de bas niveau)(used for down-level client)
AAAA-MM-JJYYYY-MM-DD

Pour plus d’informations, consultez la section « Compatibilité descendante pour les clients de bas niveau » ci-dessous.For more information, see the "Backward Compatibility for Down-level Clients" section that follows.
PlageRange 0001-01-01 à 9999-12-31 (1582-10-15 à 9999-12-31 pour Informatica)0001-01-01 through 9999-12-31 (1582-10-15 through 9999-12-31 for 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)January 1, 1 CE (Common Era) through December 31, 9999 CE (October 15, 1582 CE through December 31, 9999 CE for Informatica)
Plages d'élémentsElement ranges AAAA comprend quatre chiffres, entre 0001 et 9999, qui représentent une année.YYYY is four digits from 0001 to 9999 that represent a year. Pour Informatica, AAAA se limite à la plage 1582 à 9999.For Informatica, YYYY is limited to the range 1582 to 9999.

MM comprend deux chiffres, entre 01 et 12, qui représentent un mois de l'année spécifiée.MM is two digits from 01 to 12 that represent a month in the specified year.

JJ correspond à deux chiffres compris entre 01 et 31, selon le mois, qui représentent un jour du mois spécifié.DD is two digits from 01 to 31, depending on the month, that represents a day of the specified month.
Longueur de caractèreCharacter length 10 positions10 positions
Précision, échellePrecision, scale 10, 010, 0
Taille de stockageStorage size 3 octets, fixe3 bytes, fixed
Structure de stockageStorage structure Un entier sur 1 ou 3 octets stocke la date.1, 3-byte integer stores date.
PrécisionAccuracy Un jourOne day
Valeur par défautDefault value 1900-01-011900-01-01

Cette valeur est utilisée pour la partie date ajoutée pour la conversion implicite de time en datetime2 ou datetimeoffset.This value is used for the appended date part for implicit conversion from time to datetime2 or datetimeoffset.
CalendrierCalendar GrégorienGregorian
Précision à la fraction de seconde définie par l'utilisateurUser-defined fractional second precision NonNo
Prise en charge et conservation du décalage de fuseau horaireTime zone offset aware and preservation NonNo
Prise en charge de l'heure d'étéDaylight saving aware NonNo

Formats de littéraux de chaîne pris en charge pour dateSupported string literal formats for date

Les tableaux suivants affichent les formats de littéraux de chaîne valides pour le type de données date.The following tables show the valid string literal formats for the date data type.

NumériqueNumeric DescriptionDescription
mjamdy

[m]m/jj/[aa]aa[m]m/dd/[yy]yy

[m]m-jj-[aa]aa[m]m-dd-[yy]yy

[m]m.jj.[aa]aa[m]m.dd.[yy]yy

majmyd

mm/[aa]aa/jjmm/[yy]yy/dd

mm-[aa]aa/jjmm-[yy]yy/dd

[m]m.[aa]aa.jj[m]m.[yy]yy.dd

jmadmy

jj/[m]m/[aa]aadd/[m]m/[yy]yy

jj-[m]m-[aa]aadd-[m]m-[yy]yy

jj.[m]m.[aa]aadd.[m]m.[yy]yy

jamdym

jj/[aa]aa/[m]mdd/[yy]yy/[m]m

jj-[aa]aa-[m]mdd-[yy]yy-[m]m

jj.[aa]aa.[m]mdd.[yy]yy.[m]m

amjymd

[aa]aa/[m]m/jj[yy]yy/[m]m/dd

[aa]aa-[m]m-jj[yy]yy-[m]m-dd

[aa]aa-[m]m-jj[yy]yy-[m]m-dd
[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.[m]m, dd, and [yy]yy represent month, day, and year in a string with slash marks (/), hyphens (-), or periods (.) as separators.

Seules les années à deux ou quatre chiffres sont prises en charge.Only four- or two-digit years are supported. Utilisez des années à quatre chiffres chaque fois que possible.Use four-digit years whenever 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.To specify an integer from 0001 to 9999 that represents the cutoff year for interpreting two-digit years as four-digit years, use the Configure the two digit year cutoff Server Configuration Option.

RemarqueNote! Pour Informatica, AAAA se limite à la plage 1582 à 9999.For Informatica, YYYY is limited to the range 1582 to 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.A two-digit year that is less than or equal to the last two digits of the cutoff year is in the same century as the cutoff year. 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.A two-digit year greater than the last two digits of the cutoff year is in the century that comes before the cutoff year. 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 1950For example, if the two-digit year cutoff is the default 2049, the two-digit year 49 is interpreted as 2049 and the two-digit year 50 is interpreted as 1950.

Le format de date par défaut est déterminé par le paramètre de langue actuel.The default date format is determined by the current language setting. Vous pouvez modifier le format de date à l’aide des instructions SET LANGUAGE et SET DATEFORMAT.You can change the date format by using the SET LANGUAGE and SET DATEFORMAT statements.

Le format ajm n’est pas pris en charge pour date.The ydm format isn't supported for date.
AlphabétiqueAlphabetical DescriptionDescription
mois [jj][,] aaaamon [dd][,] yyyy

mois jj[,] [aamon dd[,] [yy

mois aaaa [jj]mon yyyy [dd]

[jj] mois[,] aaaa[dd] mon[,] yyyy

jj mois[,][aa]aadd mon[,][yy]yy

jj [aa]aa moisdd [yy]yy mon

[jj] aaaa mois[dd] yyyy mon

aaaa mois [jj]yyyy mon [dd]

aaaa [jj] moisyyyy [dd] mon
mon représente le nom complet du mois ou son abréviation dans le langage actuel.mon represents the full month name or the month abbreviation given in the current language. Les virgules sont facultatives et les majuscules sont ignorées.Commas are optional and capitalization is ignored.

Pour éviter toute ambiguïté, représentez les années à l'aide de quatre chiffres.To avoid ambiguity, use four-digit years.

Si le jour n'est pas précisé, le premier jour du mois est rajouté.If the day is missing, the first day of the month is supplied.
ISO 8601ISO 8601 DescriptionDescription
AAAA-MM-JJYYYY-MM-DD

AAAAMMJJYYYYMMDD
Identique à la norme SQL.Same as the SQL standard. C’est le seul format qui soit défini comme norme internationale.This format is the only format defined as an international standard.
Non séparéUnseparated DescriptionDescription
[aa]aammjj[yy]yymmdd

aaaa[mm][jj]yyyy[mm][dd]
Les données de date peuvent être spécifiées avec quatre, six ou huit chiffres.The date data can be specified with four, six, or eight digits. Une chaîne de six ou huit chiffres est toujours interprétée comme ymd.A six- or eight-digit string is always interpreted as ymd. Le jour et le mois doivent toujours comporter deux chiffres.The month and day must always be two digits. Une chaîne de quatre chiffres est interprétée comme l'année.A four-digit string is interpreted as year.
ODBCODBC DescriptionDescription
{ d 'aaaa-mm-jj' }{ d 'yyyy-mm-dd' } Spécifique à l'API ODBC.ODBC API specific.
Format XML W3CW3C XML format DescriptionDescription
aaaa-mm-jjTZDyyyy-mm-ddTZD Pris en charge pour l’utilisation de XML/SOAP.Supported for XML/SOAP usage.

TZD est l'indicateur de fuseau horaire (Z ou +hh:mm ou -hh:mm) :TZD is the time zone designator (Z or +hh:mm or -hh:mm):

- hh:mm représente le décalage de fuseau horaire.- hh:mm represents the time zone offset. hh comprend deux chiffres, entre 0 et 14, qui représentent le nombre d'heures dans le décalage de fuseau horaire.hh is two digits, ranging from 0 to 14, that represent the number of hours in the time zone offset.
- MM comprend deux chiffres, entre 0 et 59, qui représentent le nombre de minutes supplémentaires dans le décalage de fuseau horaire.- MM is two digits, ranging from 0 to 59, that represent the number of additional minutes in the time zone offset.
- + (plus) ou - (moins) est le signe obligatoire du décalage de fuseau horaire.- + (plus) or - (minus) the mandatory sign of the time zone offset. 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.This sign indicates that, to obtain the local time, the time zone offset is added or subtracted from the Coordinated Universal Times (UTC) time. La plage valide du décalage de fuseau horaire se situe entre -14:00 et +14:00.The valid range of time zone offset is from -14:00 to +14:00.

Conformité ANSI et ISO 8601ANSI and ISO 8601 compliance

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. »date complies with the ANSI SQL standard definition for the Gregorian calendar: "NOTE 85 - Datetime data types will allow dates in the Gregorian format to be stored in the date range 0001-01-01 CE through 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.The default string literal format, which is used for down-level clients, complies with the SQL standard form that is defined as YYYY-MM-DD. Ce format est le même que la définition ISO 8601 pour DATE.This format is the same as the ISO 8601 definition for DATE.

Notes

Pour Informatica, la plage s’étend du 1582-10-15 (15 octobre 1582) au 9999-12-31 (31 décembre 9999).For Informatica, the range is limited to 1582-10-15 (October 15, 1582 CE) to 9999-12-31 (December 31, 9999 CE).

Compatibilité descendante pour les clients de bas niveauBackward compatibility for down-level clients

Certains clients de bas niveau ne prennent pas en charge les types de données time, date, datetime2 et datetimeoffset.Some down-level clients don't support the time, date, datetime2, and datetimeoffset data types. Le tableau suivant présente le type de mappage entre une instance de haut niveau de SQL ServerSQL Server et des clients de bas niveau.The following table shows the type mapping between an up-level instance of SQL ServerSQL Server and down-level clients.

Type de données SQL ServerSQL ServerSQL ServerSQL Server data type Format de littéral de chaîne par défaut passé au client de bas niveauDefault string literal format passed to down-level client ODBC de bas niveauDown-level ODBC OLEDB de bas niveauDown-level OLEDB JDBC de bas niveauDown-level JDBC SQLCLIENT de bas niveauDown-level SQLCLIENT
timetime hh:mm:ss [.nnnnnnn]hh:mm:ss[.nnnnnnn] SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String ou SqStringString or SqString
datedate AAAA-MM-JJYYYY-MM-DD SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String ou SqStringString or SqString
datetime2datetime2 AAAA-MM-JJ hh:mm:ss[.nnnnnnn]YYYY-MM-DD hh:mm:ss[.nnnnnnn] SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String ou SqStringString or SqString
datetimeoffsetdatetimeoffset AAAA-MM-JJ hh:mm:ss[.nnnnnnn] [+|-]hh:mmYYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String ou SqStringString or SqString

Conversion de données date et timeConverting date and time data

En cas de conversion vers des types de données date et time, SQL ServerSQL Server rejette toutes les valeurs qu'il ne peut identifier comme date ou time.When you convert to date and time data types, SQL ServerSQL Server rejects all values it doesn't recognize as dates or times. Pour plus d’informations sur l’utilisation des fonctions CAST et CONVERT avec des données date et time, consultez CAST et CONVERT (Transact-SQL).For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL).

Conversion de date en d’autres types de données date et timeConverting date to other date and time types

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.This section describes what occurs when you convert a date data type to other date and time data types.

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 ».When the conversion is to time(n), the conversion fails, and error message 206 is raised: "Operand type clash: date is incompatible with time".

Dans le cas d’une conversion en datetime, la date est copiée.If the conversion is to datetime, date is copied. Le code suivant montre les résultats de la conversion d'une valeur date en valeur datetime.The following code shows the results of converting a date value to a datetime value.

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.When the conversion is to smalldatetime, the date value is in the range of a smalldatetime, the date component is copied, and the time component is set to 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.When the date value is outside the range of a smalldatetime value, error message 242 is raised: "The conversion of a date data type to a smalldatetime data types resulted in an out-of-range value."; and the smalldatetime value is set to NULL. Le code suivant montre les résultats de la conversion d'une valeur date en valeur smalldatetime.The following code shows the results of converting a date value to a smalldatetime value.

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.For conversion to datetimeoffset(n), date is copied, and the time is set to 00:00.0000000 +00:00. Le code suivant montre les résultats de la conversion d'une valeur date en valeur datetimeoffset(3).The following code shows the results of converting a date value to a datetimeoffset(3) value.

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.When the conversion is to datetime2(n), the date component is copied, and the time component is set to 00:00.000000. Le code suivant montre les résultats de la conversion d'une valeur date en valeur datetime2(3).The following code shows the results of converting a date value to a datetime2(3) value.

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 dateConverting string literals to 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.Conversions from string literals to date and time types are allowed if all parts of the strings are in valid formats. Sinon, une erreur d'exécution est déclenchée.Otherwise, a runtime error is raised. 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.Implicit conversions or explicit conversions that don't specify a style, from date and time types to string literals will be in the default format of the current session. Le tableau suivant montre les règles de conversion d’un littéral de chaîne en type de données date.The following table shows the rules for converting a string literal to the date data type.

Littéral de chaîne d'entréeInput string literal datedate
ODBC DATEODBC DATE Les littéraux de chaîne ODBC sont mappés au type de données datetime.ODBC string literals are mapped to the datetime data type. 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.Any assignment operation from ODBC DATETIME literals into a date type causes an implicit conversion between datetime and the type that the conversion rules define.
ODBC TIMEODBC TIME Consultez la règle DATE ODBC précédente.See previous ODBC DATE rule.
ODBC DATETIMEODBC DATETIME Consultez la règle DATE ODBC précédente.See previous ODBC DATE rule.
DATE uniquementDATE only SimpleTrivial
TIME uniquementTIME only Les valeurs par défaut sont fournies.Default values are supplied.
TIMEZONE uniquementTIMEZONE only Les valeurs par défaut sont fournies.Default values are supplied.
DATE + TIMEDATE + TIME La partie DATE de la chaîne d'entrée est utilisée.The DATE part of the input string is used.
DATE + TIMEZONEDATE + TIMEZONE Non autorisé.Not allowed.
TIME + TIMEZONETIME + TIMEZONE Les valeurs par défaut sont fournies.Default values are supplied.
DATE + TIME + TIMEZONEDATE + TIME + TIMEZONE La partie DATE du DATETIME local sera utilisée.The DATE part of local DATETIME will be used.

ExemplesExamples

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.The following example compares the results of casting a string to each date and time data type.

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.Here is the result set.

Type de donnéesData type SortieOutput
timetime 12:35:29.12:35:29. 12345671234567
datedate 2007-05-082007-05-08
smalldatetimesmalldatetime 2007-05-08 12:35:002007-05-08 12:35:00
datetimedatetime 2007-05-08 12:35:29.1232007-05-08 12:35:29.123
datetime2datetime2 2007-05-08 12:35:29.2007-05-08 12:35:29. 12345671234567
datetimeoffsetdatetimeoffset 2007-05-08 12:35:29.1234567 +12:152007-05-08 12:35:29.1234567 +12:15

Voir aussiSee also

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