datetimeoffset (Transact-SQL)

Définit une date qui est associée à une heure de la journée qui prend en charge les fuseaux horaires et se présente au format 24 heures.

Pour obtenir une vue d'ensemble de tous les types de données et fonctions de date et d'heure Transact-SQL, consultez Types de données et fonctions de date et d'heure (Transact-SQL). Pour obtenir des informations et des exemples communs aux types de données et fonctions de date et d'heure, consultez Utilisation des données de date et d'heure.

Description de datetimeoffset

Propriété

Valeur

Syntaxe

datetimeoffset [ (fractional seconds precision) ]

Utilisation

DECLARE @MyDatetimeoffset datetimeoffset(7)

CREATE TABLE Table1 ( Column1 datetimeoffset(7) )

Formats de littéraux de chaîne par défaut (utilisés pour le client de bas niveau)

AAAA-MM-JJ hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]

Pour plus d'informations, consultez la section « Compatibilité descendante pour les clients de bas niveau » de Utilisation des données de date et d'heure.

Plage de dates

0001-01-01 à 9999-12-31

Du 1er janvier de l'an 1 au 31 décembre 9999

Plage temporelle

00:00:00 à 23:59:59.9999999

Plage de décalages de fuseau horaire

  • -14:00 à +14:00

Plages d'éléments

AAAA comprend quatre chiffres, entre 0001 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 sept chiffres, entre 0 et 9999999, qui représentent les fractions de seconde.

hh comprend deux chiffres, entre -14 et +14.

mm comprend deux chiffres, entre 00 et 59.

Longueur de caractère

26 positions au minimum (AAAA-MM-JJ hh:mm:ss {+|-}hh:mm) et 34 au maximum (AAAA-MM-JJ hh:mm:ss.nnnnnnn {+|-}hh:mm)

Précision, échelle

Échelle spécifiéeRésultat (précision, échelle)Longueur de colonne (octets)Précision en fractions de seconde
datetimeoffset (34,7)107
datetimeoffset(0) (26,0)80-2
datetimeoffset(1) (28,1)80-2
datetimeoffset(2) (29,2)80-2
datetimeoffset(3) (30,3)93-4
datetimeoffset(4) (31,4)93-4
datetimeoffset(5) (32,5)105-7
datetimeoffset(6) (33,6)105-7
datetimeoffset(7) (34,7)105-7

Taille de stockage

10 octets, fixes, sont la valeur par défaut avec une précision à la fraction de seconde de 100 ns par défaut.

Précision

100 nanosecondes

Valeur par défaut

1900-01-01 00:00:00 00:00

Calendrier

Grégorien

Précision à la fraction de seconde définie par l'utilisateur

Oui

Prise en charge et conservation du décalage de fuseau horaire

Oui

Prise en charge de l'heure d'été

Non

Formats de littéraux de chaîne pris en charge pour datetimeoffset

Le tableau suivant répertorie les formats de littéraux de chaîne ISO 8601 pris en charge pour datetimeoffset. Pour plus d'informations sur les formats alphabétique, numérique, non séparé et d'heure pour les parties de date et d'heure de datetimeoffset, consultez date (Transact-SQL) et time (Transact-SQL).

ISO 8601

Description

AAAA-MM-JJThh:mm:ss[.nnnnnnn][{+|-}hh:mm]

Ces deux formats ne sont pas affectés par les paramètres régionaux de session SET LANGUAGE et SET DATEFORMAT. Les espaces ne sont pas autorisés entre les éléments datetimeoffset et datetime.

AAAA-MM-JJThh:mm:ss[.nnnnnnn]Z (UTC)

Ce format par définition ISO indique que la partie datetime doit être exprimée dans le fuseau horaire UTC. Par exemple, 1999-12-12 12:30:30.12345 -07:00 doit être représenté sous la forme 1999-12-12 19:30:30.12345Z.

Décalage de fuseau horaire

Un décalage de fuseau horaire spécifie le décalage de la zone de fuseau horaire UTC pour une valeur time ou datetime. Le décalage de fuseau horaire peut être représenté sous la forme [+|-] hh:mm:

  • hh comprend deux chiffres, entre 00 et 14, qui représentent le nombre d'heures dans le décalage de fuseau horaire.

  • mm comprend deux chiffres, entre 00 et 59, qui représentent le nombre de minutes supplémentaires dans le décalage de fuseau horaire.

  • + (plus) ou – (moins) est le signe obligatoire d'un décalage de fuseau horaire. Cela indique si le décalage de fuseau horaire est ajouté au temps universel coordonné ou soustrait de celui-ci pour obtenir l'heure locale. La plage valide du décalage de fuseau horaire se situe entre -14:00 et +14:00.

La plage des décalages de fuseau horaire respecte la norme XML W3C pour la définition de schéma XSD et est légèrement différente de la définition de la norme SQL 2003, 12:59 à +14:00.

Le paramètre de type facultatif fractional seconds precision spécifie le nombre de chiffres pour la partie fractionnaire des secondes. Cette valeur peut être un entier avec 0 à 7 chiffres (100 nanosecondes). La fractional seconds precision par défaut est 100 ns (sept chiffres pour la partie fractionnaire des secondes).

Les données sont stockées dans la base de données, puis traitées, comparées, triées et indexées sur le serveur comme au format UTC. Le décalage de fuseau horaire sera conservé dans la base de données pour récupération.

Le décalage de fuseau horaire donné sera supposé prendre en charge l'heure d'été et être réglé pour tout datetime donné situé dans la période d'observation de l'heure d'été.

Pour le type datetimeoffset, les valeurs datetime UTC et locale (pour le décalage de fuseau horaire persistant ou préservé) seront validées lors des opérations d'insertion, de mise à jour, arithmétique, de conversion ou d'attribution. La détection de toute valeur datetime UTC ou locale non valide (pour le décalage de fuseau horaire persistant ou préservé) déclenchera une erreur de valeur non valide. Par exemple, 9999-12-31 10:10:00 est valide au format UTC, mais déborde en heure locale sur le décalage de fuseau horaire +13:50.

Conformité ANSI et ISO 8601

Les sections relatives à la conformité ANSI et ISO 8601 des rubriques date et time s'appliquent à datetimeoffset.

Exemples

L'exemple suivant compare les résultats de la conversion d'une chaîne en chaque type de données de 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'
    ,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetimeoffset(7)) AS
        'datetimeoffset IS08601';

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