Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Base de données SQL dans Microsoft Fabric
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.
Évitez d’utiliser datetime pour le nouveau travail. Utilisez plutôt les types de données time, date, datetime2 et datetimeoffset . Ces types s’alignent sur SQL Standard et 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
| Property | Value |
|---|---|
| Syntax | DATETIME |
| Usage | DECLARE @MyDatetime DATETIME;CREATE TABLE Table1 (Column1 DATETIME); |
| Formats littéraux de chaîne par défaut (utilisés pour le client de bas niveau) | Sans objet |
| Plage de dates | 1753-01-01 (1er janvier 1753) à 9999-12-31 (31 décembre 9999) |
| Intervalle de temps | 00:00:00 à 23:59:59.997 |
| Plage de décalage de fuseau horaire | None |
| Plages d’éléments |
yyyy est de quatre chiffres qui 17539999 représentent une année.MM est de deux chiffres, allant de 01 à 12, qui représentent un mois dans l’année spécifiée.dd est de deux chiffres, allant de 01 à 31 selon le mois, qui représentent un jour du mois spécifié.HH est deux chiffres, allant de 00 à 23, qui représentent l’heure.mm est de deux chiffres, allant de 00 à 59, qui représentent la minute.ss est deux chiffres, allant de 00 à 59, qui représentent la seconde.n* est égal à zéro à trois chiffres, allant de 0 à 999, qui représentent les fractions de seconde. |
| Longueur du caractère | 19 positions au minimum et 23 au maximum |
| Taille du stockage | 8 octets |
| Accuracy | Arrondi à incréments de .000, .003ou .007 secondes |
| Valeur par défaut | 1900-01-01 00:00:00 |
| Calendar | Grégorien (inclut l’ensemble des années) |
| Précision fractionnaire fractionnaire définie par l’utilisateur | No |
| Décalage de fuseau horaire prenant en charge et conservation | No |
| Prise en charge de l’enregistrement d’été | No |
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. À l’exception d’ODBC, les littéraux de chaîne datetime sont entre guillemets simples (', par exemple. 'string_literaL' Si l’environnement n’est pas us_english, les littéraux de chaîne doivent être au format N'string_literaL'Unicode.
Format numérique
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 représente le vingtième jour de mai 1997. Lorsque vous utilisez le format de date numérique, spécifiez le mois, le jour et l’année dans une chaîne qui utilise des marques de barre oblique (/), des traits d’union (-) ou des points (.) comme séparateurs. Cette chaîne doit apparaître sous la forme suivante :
<number separator number separator number [time] [time]>
Lorsque la langue est définie us_english, l’ordre par défaut de la date est mdy (mois, jour, année). Vous pouvez modifier l’ordre de la date à l’aide de l’instruction SET DATEFORMAT.
Le paramètre pour SET DATEFORMAT déterminer la façon dont les valeurs de date sont interprétées. Si l’ordre ne correspond pas au paramètre, les valeurs ne sont pas interprétées comme des dates. Les dates hors ordre peuvent être mal interprétées comme hors plage ou avec des valeurs incorrectes. Par exemple, 12/10/08 il peut être interprété comme l’une des six dates, en fonction du DATEFORMAT paramètre. Une année en quatre parties est interprétée comme l'année.
| Format de date | Order |
|---|---|
[0]4/15/[19]96 |
mdy |
[0]4-15-[19]96 |
mdy |
[0]4.15.[19]96 |
mdy |
[0]4/[19]96/15 |
myd |
15/[0]4/[19]96 |
dmy |
15/[19]96/[0]4 |
dym |
[19]96/15/[0]4 |
ydm |
[19]96/[0]4/15 |
ymd |
| Format de l’heure |
|---|
14:30 |
14:30[:20:997] |
14:30[:20.9] |
4am |
4 PM |
Format alphabétique
Vous pouvez spécifier des données de date avec un mois spécifié comme nom complet du mois. Par exemple, Aprilou l’abréviation de mois de Apr, spécifiée dans la langue actuelle. Les virgules sont facultatives et les majuscules sont ignorées.
Instructions relatives à l'utilisation des formats de date alphabétiques :
Placez les données de date et d’heure entre guillemets simples (
'). Pour les langues autres que l’anglais, utilisezN''.Les caractères placés entre crochets sont facultatifs.
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 de réduction de l’année à deux chiffres sont 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 le seuil de deux chiffres de l’année est
2050(valeur par défaut),25est interprété comme2025et50est interprété comme1950. 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é.
Le
SET DATEFORMATparamètre de session n’est pas appliqué lorsque vous spécifiez le mois sous forme alphabétique.
| Alphabetical |
|---|
Apr[il] [15][,] 1996 |
Apr[il] 15[,] [19]96 |
Apr[il] 1996 [15] |
[15] Apr[il][,] 1996 |
15 Apr[il][,][19]96 |
15 [19]96 apr[il] |
[15] 1996 apr[il] |
1996 APR[IL] [15] |
1996 [15] APR[IL] |
Format ISO 8601
Pour utiliser le format ISO 8601, vous devez spécifier chaque élément au format, y compris le Tsigne deux-points (:) et le point (.) affichés dans le format.
Les crochets indiquent que le composant fractions de seconde est facultatif. Le composant heure s'exprime au format 24 heures. Indique T le début de la partie heure de la valeur datetime .
L’avantage d’utiliser le format ISO 8601 est qu’il s’agit d’une norme internationale avec une spécification non ambiguë. De plus, ce format n’est pas affecté par le SET DATEFORMAT paramètre SET LANGUAGE.
Examples:
2004-05-23T14:25:102004-05-23T14:25:10.487
| ISO 8601 |
|---|
yyyy-MM-ddTHH:mm:ss[.mmm] |
yyyyMMdd[ HH:mm:ss[.mmm]] |
Format non séparé
Ce format est similaire au format ISO 8601, sauf qu’il ne contient aucun séparateur de date.
| Unseparated |
|---|
yyyyMMdd HH:mm:ss[.mmm] |
Format ODBC
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 sont au format suivant : { <literal_type> '<constant_value>' }
<literal_type>spécifie le type de la séquence d’échappement. Les horodatages ont trois<literal_type>spécificateurs :-
d= date uniquement -
t= heure uniquement -
ts= timestamp (heure + date)
-
<constant_value>est la valeur de la séquence d’échappement.<constant_value>doit suivre ces formats pour chaque<literal_type>:-
d:yyyy-MM-dd -
t:hh:mm:ss[.fff] -
ts:yyyy-MM-dd HH:mm:ss[.fff]
-
| ODBC |
|---|
{ ts '1998-05-02 01:23:56.123' } |
{ d '1990-10-02' } |
{ t '13:33:41' } |
Arrondi de la précision à la fraction de seconde datetime
Les valeurs datetime sont arrondies à des incréments de .000, .003ou .007 secondes, comme indiqué dans l’exemple suivant.
SELECT '01/01/2024 23:59:59.999' AS [User-specified value],
CAST('01/01/2024 23:59:59.999' AS DATETIME) AS [System stored value]
UNION SELECT '01/01/2024 23:59:59.998', CAST('01/01/2024 23:59:59.998' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.997', CAST('01/01/2024 23:59:59.997' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.996', CAST('01/01/2024 23:59:59.996' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.995', CAST('01/01/2024 23:59:59.995' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.994', CAST('01/01/2024 23:59:59.994' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.993', CAST('01/01/2024 23:59:59.993' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.992', CAST('01/01/2024 23:59:59.992' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.991', CAST('01/01/2024 23:59:59.991' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.990', CAST('01/01/2024 23:59:59.990' AS DATETIME);
Voici le jeu de résultats.
| Valeur spécifiée par l’utilisateur | Valeur stockée système |
|---|---|
01/01/2024 23:59:59.999 |
2024-01-02 00:00:00.000 |
01/01/2024 23:59:59.99801/01/2024 23:59:59.99701/01/2024 23:59:59.99601/01/2024 23:59:59.995 |
2024-01-01 23:59:59.997 |
01/01/2024 23:59:59.99401/01/2024 23:59:59.99301/01/2024 23:59:59.992 |
2024-01-01 23:59:59.993 |
01/01/2024 23:59:59.99101/01/2024 23:59:59.990 |
2024-01-01 23:59:59.990 |
Conformité ANSI et ISO 8601
datetime n’est pas conforme au format ANSI ou ISO 8601.
Convertir des données de date et d’heure
Lorsque vous convertissez en types de données de date et d’heure, le Moteur de base de données rejette toutes les valeurs qu’il ne peut pas reconnaître comme dates ou heures. Pour plus d’informations sur l’utilisation des CAST fonctions avec CONVERT des données de date et d’heure, consultez CAST et CONVERT.
Convertir d’autres types de date et d’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 de temps 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';
Voici le jeu de résultats.
@datetime @date
------------------------ -----------
2016-12-21 00:00:00.000 2016-12-21
L’exemple précédent utilise un format de date spécifique à une région (MM-DD-YY).
DECLARE @date DATE = '12-21-16';
Vous devez mettre à jour l’exemple pour qu’il corresponde au format de votre région.
Vous pouvez également compléter l’exemple avec le format de date conforme ISO 8601 (yyyy-MM-dd). Par exemple:
DECLARE @date DATE = '2016-12-21';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Lorsque la conversion est de time(n), le composant d’heure est copié et le composant de date est défini 1900-01-01sur . Lorsque la précision fractionnelle de la valeur time(n) est supérieure à trois chiffres, la valeur est tronquée à ajuster. 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';
Voici le jeu de résultats.
@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 les 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';
Voici le jeu de résultats.
@datetime @smalldatetime
------------------------ --------------------
2016-12-01 12:32:00.000 2016-12-01 12:32:00
Lorsque la conversion provient de datetimeoffset(n), les composants de date et d’heure sont copiés. Le fuseau horaire est tronqué. Lorsque la précision fractionnelle 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';
Voici le jeu de résultats.
@datetime @datetimeoffset
------------------------ -------------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0
Lorsque la conversion provient de datetime2(n),la date et l’heure sont copiées. Lorsque la précision fractionnelle 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';
Voici le jeu de résultats.
@datetime @datetime2
------------------------ -------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
Examples
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('2024-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST('2024-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST('2024-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2',
CAST('2024-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 |
2024-05-08 |
smalldatetime |
2024-05-08 12:35:00 |
datetime |
2024-05-08 12:35:29.123 |
datetime2 |
2024-05-08 12:35:29.1234567 |
datetimeoffset |
2024-05-08 12:35:29.1234567 +12:15 |