Partager via


datetime (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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 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 de stockage 8 octets
Précision Arrondi à incréments de .000, .003ou .007 secondes
Valeur par défaut 1900-01-01 00:00:00
Calendrier 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 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, 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, utilisez N''.

  • 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é comme 2025 et 50 est interprété comme 1950. 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 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.

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 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 obtenu.

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 obtenu.

@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 obtenu.

@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 obtenu.

@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 obtenu.

@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 obtenu.

@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 obtenu.

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