datetime (Transact-SQL)

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.

[!REMARQUE]

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 de datetime

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

Aucune

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 chaîne doivent se présenter 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]

04:00

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 :

  • séparateur de nombre séparateur de nombre number [time] [time]

Lorsque 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 (car elles sont hors limites) ou elles sont mal interprétées. 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 :

  • Placez la date et l'heure entre des 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 Configurer l'option de configuration du serveur two digit year cutoff appartiennent au même siècle que l'année de troncature. Les valeurs supérieures ou égales à la valeur de cette option appartiennent au siècle qui précède l'année de troncature. Par exemple, si l'option d'année de coupure à deux chiffres a pour valeur 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 paramètre de session SET DATEFORMAT n'est pas appliqué lorsque vous précisez le mois sous forme alphabétique.

ISO 8601

Description

AAAA-MM-JJThh:mm:ss[.mmm]

AAAAMMJJ[ hh:mm:ss [.mmm]]

Exemples :

  • 2004-05-23T14:25:10

  • 2004-05-23T14:25:10.487

Pour respecter le format ISO 8601, vous devez spécifier chaque élément dans ce format. y compris T, le signe deux-points (:) et le point (.) qui y figurent.

Les crochets indiquent que le composant fractions de seconde est facultatif. Le composant heure s'exprime au format 24 heures.

Le 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 les paramètres SET DATEFORMAT ni 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 timestamp. Ce format d'horodateur 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'horodateur ODBC ont le format suivant : { literal_type 'constant_value' } :

  • literal_type spécifie le type de séquence d'échappement. Le type timestamp a trois spécificateurs de literal_type :

    • d = date uniquement

    • t = heure uniquement

    • ts = timestamp (heure + date)

  • constant_value est la valeur de la séquence d'échappement. constant_value doit respecter ces formats pour chaque literal_type.

    literal_type

    constant_value format

    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 à ANSI ni ISO 8601.

Conversion de données de date et d'heure

Lorsque vous effectuez une conversion vers des types de données date et heure, SQL Server rejette toutes les valeurs qu'il ne peut identifier comme dates ou heures. Pour plus d'informations sur l'utilisation des fonctions CAST et CONVERT avec des données de date et d'heure, consultez CAST et CONVERT (Transact-SQL).

Conversion de datetime en d'autres types de date et d'heure

Le tableau suivant décrit ce qui se produit lorsqu'un type de données datetime est converti en d'autres types de données de date et d'heure.

Type de données vers lequel effectuer la conversion

Détails de conversion

date

Le jour, le mois et l'année 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-05';
DECLARE @datetime datetime = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
--Result
--@datetime               @date
------------------------- ----------
--2005-12-21 00:00:00.000 2005-12-21

time(n)

Le composant heure est copié et le composant date est défini sur '1900-01-01'. Lorsque 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
--
--(1 row(s) affected)

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-01 12:32';
DECLARE @datetime datetime = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
--Result
--@datetime               @smalldatetime
------------------------- -----------------------
--2001-12-01 12:32:00.000 2001-12-01 12:32:00
--
--(1 row(s) affected)

datetimeoffset(n)

Les composants date et heure sont copiés. Le fuseau horaire est tronqué. Lorsque la précision de fraction de la valeur datetimeoffset(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 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 +01:0
--
--(1 row(s) affected)

datetime2(n)

La date et l'heure sont copiées. Lorsque la précision de fraction de la valeur datetime2(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 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
--
--(1 row(s) affected)

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 l'ensemble des résultats.

Type de données

Sortie

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

Référence

CAST et CONVERT (Transact-SQL)