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.
É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
Propriété | Valeur |
---|---|
Syntaxe | DATETIME |
Utilisation | 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) | Non applicable |
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 | Aucun |
Plages d’éléments | yyyy est de quatre chiffres qui 1753 9999 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 de stockage | 8 octets |
Précision | Arrondi à incréments de .000 , .003 ou .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 | Non |
Décalage de fuseau horaire prenant en charge et conservation | Non |
Prise en charge de l’enregistrement 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. À 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 la date | Ordre |
---|---|
[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, April
ou 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),25
est interprété comme2025
et50
est 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 DATEFORMAT
paramètre de session n’est pas appliqué lorsque vous spécifiez le mois sous forme alphabétique.
Alphabétique |
---|
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 T
signe 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.
Exemples :
2004-05-23T14:25:10
2004-05-23T14:25:10.487
ISO 8601 |
---|
yyyy-MM-ddTHH:mm:ss[.mmm] |
yyyyMMdd[ HH:mm:ss[.mmm]] |
Format nonparé
Ce format est similaire au format ISO 8601, sauf qu’il ne contient aucun séparateur de date.
Non séparé |
---|
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 uniquementt
= heure uniquementts
= 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
, .003
ou .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.998 01/01/2024 23:59:59.997 01/01/2024 23:59:59.996 01/01/2024 23:59:59.995 |
2024-01-01 23:59:59.997 |
01/01/2024 23:59:59.994 01/01/2024 23:59:59.993 01/01/2024 23:59:59.992 |
2024-01-01 23:59:59.993 |
01/01/2024 23:59:59.991 01/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-01
sur . 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
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('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 | Sortie |
---|---|
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 |