datetime (Transact-SQL)
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Définit une date qui est associée à une heure de la journée avec des fractions de seconde qui se présente au format 24 heures.
Notes
Utilisez les types de données time, date, datetime2 et datetimeoffset pour une nouvelle tâche. Ces types s'alignent sur la norme SQL. Ils sont plus portables. time, datetime2 et datetimeoffset offrent une meilleure précision à la seconde. datetimeoffset fournit la prise en charge des fuseaux horaires pour les applications globalement déployées.
Description
Propriété | Valeur |
---|---|
Syntaxe | datetime |
Utilisation | DECLARE @MyDatetime datetime CREATE TABLE Table1 ( Column1 datetime ) |
Formats de littéraux de chaîne par défaut (utilisé pour le client de bas niveau) |
Non applicable |
Plage de dates | Du 1er janvier 1753 au 31 décembre 9999 |
Plage temporelle | 00:00:00 à 23:59:59.997 |
Plage de décalages de fuseau horaire | Aucun |
Plages d'éléments | AAAA comprend quatre chiffres, entre 1753 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é. hh comprend deux chiffres, entre 00 et 23, qui représentent l'heure. mm comprend deux chiffres, entre 00 et 59, qui représentent la minute. ss comprend deux chiffres, entre 00 et 59, qui représentent la seconde. n* comprend entre zéro et trois chiffres, entre 0 et 999, qui représentent les fractions de seconde. |
Longueur de caractère | 19 positions au minimum et 23 au maximum |
Taille de stockage | 8 octets |
Précision | Arrondi aux incréments de ,000, ,003 ou ,007 secondes |
Valeur par défaut | 1900-01-01 00:00:00 |
Calendrier | Grégorien (n’inclut pas la plage complète des années.) |
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 datetime
Les tableaux suivants répertorient les formats de littéraux de chaîne pris en charge pour datetime. Sauf pour ODBC, les littéraux de chaîne datetime sont encadrés par des guillemets simples ('), par exemple 'string_literaL'. Si l’environnement n’est pas us_english, les littéraux de type chaîne doivent être au format N'string_literaL'.
Numérique | Description |
---|---|
Formats de date : [0]4/15/[19]96 -- (mja) [0]4-15-[19]96 -- (mja) [0]4.15.[19]96 -- (mja) [0]4/[19]96/15 -- (maj) 15/[0]4/[19]96 -- (jma) 15/[19]96/[0]4 -- (jam) [19]96/15/[0]4 -- (ajm) [19]96/[0]4/15 -- (amj) Formats d'heure : 14:30 14:30[:20:999] 14:30[:20.9] 4am 16:00 |
Vous pouvez spécifier les données de date à l'aide d'un mois spécifié sous forme numérique. Par exemple, 5/20/97 correspond au vingtième jour du mois de mai 1997. Lorsque vous utilisez un format de date numérique, spécifiez l'année, le mois et le jour dans une chaîne qui utilise des barres obliques (/), des traits d'union (-) ou des points (.) comme séparateurs. Cette chaîne doit apparaître sous la forme suivante : nombre séparateur nombre séparateur nombre [heure] [heure] Quand la langue sélectionnée est français, l’ordre par défaut pour la date est jma. Vous pouvez modifier l’ordre de la date à l’aide de l’instruction SET DATEFORMAT. Le paramètre de SET DATEFORMAT détermine l'interprétation des valeurs de date. Si l’ordre ne correspond pas au paramètre, les valeurs ne sont pas interprétées comme des dates. Les dates en désordre peuvent être interprétées comme étant hors limites ou ayant des valeurs incorrectes. Par exemple, 12/10/08 peut être interprété comme 6 dates différentes, selon le paramétrage de DATEFORMAT. Une année en quatre parties est interprétée comme l'année. |
Alphabétique | Description |
---|---|
Avr[il] [15][,] 1996 Avr[il] 15[,] [19]96 Avr[il] 1996 [15] [15] Avr[il][,] 1996 15 Avr[il][,][19]96 15 [19]96 avr[il] [15] 1996 avr[il] 1996 AvR[IL] [15] 1996 [15] AVR[IL] |
Vous pouvez spécifier des données de date avec un mois spécifié comme nom complet du mois. Par exemple, Avril ou l'abréviation Avr spécifiée dans la langue actuelle ; les virgules sont facultatives et la mise en majuscules est ignorée. Instructions relatives à l'utilisation des formats de date alphabétiques : 1) Placez la date et l’heure entre des guillemets simples ('). Pour les langues autres que l'anglais, utilisez N' 2) Les caractères placés entre crochets sont facultatifs. 3) Si vous spécifiez uniquement les deux derniers chiffres de l’année, les valeurs inférieures aux deux derniers chiffres de la valeur de l’option de configuration Configurer l’option de configuration de serveur two digit year cutoff appartiennent au même siècle que l’année de coupure. Les valeurs supérieures ou égales à la valeur de cette option appartiennent au siècle qui précède l’année de coupure. Par exemple, si l’option two digit year cutoff a pour valeur 2050 (valeur par défaut), 25 est interprété comme 2025 et 50 comme 1950. Pour éviter toute ambiguïté, représentez les années à l'aide de quatre chiffres. 4) Si le jour n’est pas précisé, le premier jour du mois est rajouté. Le paramètre de session SET DATEFORMAT n’est pas appliqué lorsque vous indiquez le mois sous forme alphabétique. |
ISO 8601 | Description |
---|---|
AAAA-MM-JJThh:mm:ss[.mmm] AAAAMMJJ[ hh:mm:ss [.mmm]] |
Exemples : 1) 2004-05-23T14:25:10 2) 2004-05-23T14:25:10.487 Pour utiliser le format ISO 8601, vous devez spécifier chaque élément au format indiqué ci-dessus, notamment le T, les deux-points (:) et le point (.). Les crochets indiquent que le composant fractions de seconde est facultatif. Le composant heure s'exprime au format 24 heures. T indique le début de la partie heure de la valeur datetime. Le format ISO 8601 présente un avantage de taille puisqu'il s'agit d'une norme internationale avec une spécification claire. Ce format n’est pas affecté par le paramètre SET DATEFORMAT ou SET LANGUAGE. |
Non séparé | Description |
---|---|
AAAAMMJJ hh:mm:ss [.mmm] |
ODBC | Description |
---|---|
{ ts '1998-05-02 01:23:56.123' } { d '1990-10-02' } { t '13:33:41' } |
L'API ODBC définit des séquences d'échappement pour représenter les valeurs de date et d'heure, ce qu'ODBC appelle des données horodateur. Ce format d’horodatage ODBC est également pris en charge par la définition de langage OLE DB (DBGUID-SQL) prise en charge par le fournisseur Microsoft OLE DB pour SQL Server. Les applications qui utilisent les API basées sur ADO, OLE DB et ODBC peuvent utiliser ce format d'horodateur ODBC pour représenter les dates et les heures. Les séquences d’échappement d’horodatage ODBC ont le format { literal_type 'constant_value' }: - literal_type spécifie le type de séquence d’échappement. Les horodatages ont trois spécificateurs literal_type : 1) d = date uniquement 2) t = heure uniquement 3) ts = horodatage (heure + date) - 'constant_value' est la valeur de la séquence d’échappement. constant_value doit respecter les formats suivants pour chaque literal_type. d : aaaa-mm-jj t : hh:mm:ss[.fff] ts : aaaa-mm-jj hh:mm:ss[.fff] |
Arrondi de la précision à la fraction de seconde datetime
Les valeurs datetime sont arrondies à des incréments de .000, .003 ou .007 secondes, comme cela est illustré dans le tableau suivant.
Valeur spécifiée par l'utilisateur | Valeur stockée système |
---|---|
01/01/98 23:59:59.999 | 1998-01-02 00:00:00.000 |
01/01/98 23:59:59.995 01/01/98 23:59:59.996 01/01/98 23:59:59.997 01/01/98 23:59:59.998 |
1998-01-01 23:59:59.997 |
01/01/98 23:59:59.992 01/01/98 23:59:59.993 01/01/98 23:59:59.994 |
1998-01-01 23:59:59.993 |
01/01/98 23:59:59.990 01/01/98 23:59:59.991 |
1998-01-01 23:59:59.990 |
Conformité ANSI et ISO 8601
datetime n’est pas conforme au format ANSI ou ISO 8601.
Conversion de données date et time
Lorsque vous effectuez une conversion vers des types de données date et heure, SQL Server rejette toutes les valeurs qu’il ne reconnaît pas comme des dates ou des heures. 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 d’autres types date et heure en type de données datetime
Cette section décrit ce qui se produit quand d’autres types de données date et time sont convertis en type de données datetime.
Lors d’une conversion à partir du format date, l’année, le mois et le jour sont copiés. 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-21-16';
DECLARE @datetime datetime = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
--Result
--@datetime @date
------------------------- ----------
--2016-12-21 00:00:00.000 2016-12-21
Notes
L’exemple ci-dessus utilise un format de date spécifique à une région (MM-DD-YY).
DECLARE @date date = '12-21-16';
Vous pouvez mettre à jour l’exemple pour qu’il corresponde au format de votre région.
Vous pouvez également remplir l’exemple avec le format de date conforme ISO 8601 (AAAA-MM-JJ). Par exemple :
DECLARE @date date = '2016-12-21';
DECLARE @datetime datetime = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Dans le cas d’une conversion à partir de time(n), le composant heure est copié et le composant date est défini sur « 1900-01-01 ». Quand la précision de fraction de la valeur time(n) est supérieure à trois chiffres, la valeur est tronquée en conséquence. L'exemple suivant montre les résultats de la conversion d'une valeur time(4)
en valeur datetime
.
DECLARE @time time(4) = '12:10:05.1237';
DECLARE @datetime datetime = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
--Result
--@datetime @time
------------------------- -------------
--1900-01-01 12:10:05.123 12:10:05.1237
Dans le cas d’une conversion à partir de smalldatetime, les heures et les minutes sont copiées. Les secondes et fractions de seconde sont définies sur 0. Le code suivant montre les résultats de la conversion d'une valeur smalldatetime
en valeur datetime
.
DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';
DECLARE @datetime datetime = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
--Result
--@datetime @smalldatetime
------------------------- -----------------------
--2016-12-01 12:32:00.000 2016-12-01 12:32:00
Dans le cas d’une conversion à partir de datetimeoffset(n), les composants date et heure sont copiés. Le fuseau horaire est tronqué. Quand la précision de fraction de la valeur datetimeoffset(n) est supérieure à trois chiffres, la valeur est tronquée. L'exemple suivant montre les résultats de la conversion d'une valeur datetimeoffset(4)
en valeur datetime
.
DECLARE @datetimeoffset datetimeoffset(4) = '1968-10-23 12:45:37.1234 +10:0';
DECLARE @datetime datetime = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
--Result
--@datetime @datetimeoffset
------------------------- ------------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0
Dans le cas d’une conversion à partir de datetime2(n), la date et l’heure sont copiées. Quand la précision de fraction de la valeur datetime2(n) est supérieure à trois chiffres, la valeur est tronquée. L'exemple suivant montre les résultats de la conversion d'une valeur datetime2(4)
en valeur datetime
.
DECLARE @datetime2 datetime2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime datetime = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
--Result
--@datetime @datetime2
------------------------- ------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
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('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 |
Voir aussi
Commentaires
Envoyer et afficher des commentaires pour