date (Transact-SQL)
S’applique à : SQL Server Base de données Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Point de terminaison d'analyse SQL dans Microsoft Fabric Entrepôt dans Microsoft Fabric Base de données SQL dans Microsoft Fabric
Définit une date dans SQL Server. Le type de données date a été introduit dans SQL Server 2008 (10.0.x).
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) |
yyyy-MM-dd Pour plus d’informations, consultez la section Compatibilité descendante pour les clients de bas niveau. |
Plage | 0001-01-01 par l’intermédiaire de 9999-12-31 (1582-10-15 par l’intermédiaire de 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 | yyyy comprend quatre chiffres, de 0001 à 9999 , qui représentent une année. Informatica limite yyyy à la plage 1582 à 9999 .MM comprend deux chiffres, de 01 à 12 , qui représentent un mois de l’année spécifiée.dd correspond à deux chiffres de 01 à 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 | une date de stockage d’un nombre entier de 3 octets |
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 listes suivantes affichent les formats littéraux de chaîne valides pour le type de données de date .
[m]m
, dd
, et [yy]yy
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 0001
9999
entre celui qui représente l’année de coupure pour interpréter les années à deux chiffres sous forme d’années à quatre chiffres, utilisez l’option de configuration du serveur de coupure de deux chiffres .
Pour Informatica, yyyy
est limité à 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 paramètre de langue actuel détermine le format de date par défaut. 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.
Formats littéral de chaîne pour mois-jour-année
SET DATEFORMAT mdy;
[m]m/dd/[yy]yy
[m]m-dd-[yy]yy
Formats littéral de chaîne pour month-year-day
SET DATEFORMAT myd;
[m]m/[yy]yy/dd
[m]m-[yy]yy-dd
[m]m.[yy]yy.dd
Formats littéraux de chaîne pour day-month-year
SET DATEFORMAT dmy;
dd/[m]m/[yy]yy
dd-[m]m-[yy]yy
dd.[m]m.[yy]yy
Formats littéraux de chaîne pour jour-année-mois
SET DATEFORMAT dym;
dd/[yy]yy/[m]m
dd-[yy]yy-[m]m
dd.[yy]yy.[m]m
Formats littéraux de chaîne pour year-month-day
SET DATEFORMAT ymd;
[yy]yy/[m]m/dd
[yy]yy-[m]m-dd
[yy]yy-[m]m-dd
Liste alphabétique des formats
[dd] mon[,] yyyy
dd mon[,][yy]yy
dd [yy]yy mon
[dd] yyyy mon
mon [dd][,] yyyy
mon dd[,] [yy]
mon yyyy [dd]
yyyy mon [dd]
yyyy [dd] mon
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é.
Liste des formats ISO 8601
yyyy-MM-dd
yyyyMMdd
Identique à la norme SQL. C’est le seul format qui soit défini comme norme internationale.
Liste nonparée des formats
[yy]yyMMdd
yyyy[MMdd]
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.
Format de date ODBC
{ d 'yyyy-MM-dd' }
Spécifique à l'API ODBC.
Format de date XML W3C
yyyy-MM-ddTZD
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, entre0
et14
, qui représentent le nombre d’heures dans le décalage de fuseau horaire.mm
comprend deux chiffres, entre0
to59
, 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 :
Les types de données Datetime autorisent les dates au format grégorien à stocker dans la plage de dates 0001-01-01 CE à 9999-12-31 CE.
Le format littéral de chaîne par défaut, utilisé pour les clients de bas niveau, respecte le format standard SQL, défini comme yyyy-MM-dd
. Ce format est le même que la définition ISO 8601 pour DATE
.
Remarque
Pour Informatica, la plage se limite à 1582-10-15
(15 octobre 1582 CE) à 9999-12-31
(31 décembre 9999 CE).
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 | yyyy-MM-dd |
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] [+ or -]hh:mm |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
Convertir des données de date et d’heure
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 CAST
fonctions avec CONVERT
des données de date et d’heure, consultez CAST et CONVERT.
Conversion de date en d’autres types de date et d’heure
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 temps(n), la conversion échoue et le message d’erreur 206 est généré :
Conflit de types d’opérandes : la date est incompatible avec l’heure.
Dans le cas d’une conversion en dateheure, la date est copiée. Le code suivant montre les résultats de la conversion d’une valeur date en une valeur dateheure.
DECLARE @date AS DATE = '12-10-25';
DECLARE @datetime AS DATETIME = @date;
SELECT @date AS '@date',
@datetime AS '@datetime';
Voici le jeu de résultats.
@date @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000
Dans le cas d’une conversion en smalldatetime, 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é et la valeur smalldatetime esr défini à NULL
:
La conversion d’un type de données date en type de données smalldatetime a créé une valeur hors limites.
Le code suivant montre les résultats de la conversion d’une valeur date en une valeur smalldatetime.
DECLARE @date AS DATE = '1912-10-25';
DECLARE @smalldatetime AS SMALLDATETIME = @date;
SELECT @date AS '@date',
@smalldatetime AS '@smalldatetime';
Voici le jeu de résultats.
@date @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00
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 une valeur datetimeoffset(3).
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = @date;
SELECT @date AS '@date',
@datetimeoffset AS '@datetimeoffset';
Voici le jeu de résultats.
@date @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00
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 une valeur datetime2(3).
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetime2 AS DATETIME2 (3) = @date;
SELECT @date AS '@date',
@datetime2 AS '@datetime2(3)';
Voici le jeu de résultats.
@date @datetime2(3)
---------- -----------------------
1912-10-25 1912-10-25 00:00:00.000
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 les explicites qui ne précisent pas un style, des types de date et d’heure aux types littéraux de chaîne, sont dans le format par défaut de la session en cours. 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 de DATEHEURE locale sera utilisée. |
Exemples
L’exemple suivant compare les résultats de la conversion d’une chaîne en chaque type de données date et time.
SELECT CAST ('2022-05-08 12:35:29.1234567 +12:15' AS TIME (7)) AS 'time',
CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST ('2022-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST ('2022-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIME2 (7)) AS 'datetime2',
CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET (7)) AS 'datetimeoffset';
Voici le jeu de résultats.
Type de données | Output |
---|---|
time | 12:35:29.1234567 |
date | 2022-05-08 |
smalldatetime | 2022-05-08 12:35:00 |
datetime | 2022-05-08 12:35:29.123 |
datetime2 | 2022-05-08 12:35:29.1234567 |
datetimeoffset | 2022-05-08 12:35:29.1234567 +12:15 |