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.
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) |
YYYY-MM-DD hh:mm:ss[. nnnnnnn] [{+|-}hh:mm] Pour plus d'informations, consultez la section « Compatibilité descendante pour les clients de bas niveau » qui suit. |
||||||||||||||||||||||||||||||||||||||||
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 |
|
||||||||||||||||||||||||||||||||||||||||
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 |
---|---|
YYYY-MM-DDThh: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. |
YYYY-MM-DDThh: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.
Compatibilité descendante pour les clients de bas niveau
Certains clients de bas niveau ne prennent pas en charge les types de données time, date, datetime2 et datetimeoffset. Le tableau suivant présente le type de mappage entre une instance de haut niveau de SQL Server et des clients de bas niveau.
Type de données SQL Server 2012 |
Format de littéral de chaîne par défaut passé au client de bas niveau |
ODBC de bas niveau |
OLEDB de bas niveau |
JDBC de bas niveau |
SQLCLIENT de bas niveau |
---|---|---|---|---|---|
time |
hh:mm:ss[. nnnnnnn] |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
date |
AAAA-MM-JJ |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
datetime2 |
YYYY-MM-DD hh:mm:ss[. nnnnnnn] |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
datetimeoffset |
YYYY-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mm |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
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 types de données datetimeoffset vers d'autres types de date et d'heure
Le tableau suivant décrit ce qui se produit lorsqu'un type de données datetimeoffset 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 code suivant montre les résultats de la conversion d'une valeur datetimeoffset(4) en valeur date.
|
time(n) |
Les heures, les minutes, les secondes et les fractions de seconde sont copiées. La valeur de fuseau horaire est tronquée. Lorsque la précision de la valeur datetimeoffset(n) est supérieure à la précision de la valeur time(n), la valeur est arrondie à la valeur supérieure. Le code suivant montre les résultats de la conversion d'une valeur datetimeoffset(4) en valeur time(3).
|
datetime |
Les valeurs de date et heure sont copiées et 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. Le code suivant montre les résultats de la conversion d'une valeur datetimeoffset(4) en valeur datetime.
|
smalldatetime |
La date et les heures sont copiées. Les minutes sont arrondies à la valeur supérieure par rapport à la valeur des secondes, et les secondes sont définies à 0. Le code suivant montre les résultats de la conversion d'une valeur datetimeoffset(3) en valeur smalldatetime.
|
datetime2(n) |
Les date et heure sont copiées dans la valeur datetime2 et le fuseau horaire est tronqué. Lorsque la précision de la valeur datetime2(n) est supérieure à la précision de la valeur datetimeoffset(n), la fraction de seconde est tronquée en conséquence. Le code suivant montre les résultats de la conversion d'une valeur datetimeoffset(4) en valeur datetime2(3).
|
Conversion de littéraux de chaîne en datetimeoffset
Les conversions de littéraux de chaîne en types de date et d'heure sont autorisées si toutes les parties des chaînes sont dans des formats valides. Sinon, une erreur d'exécution est déclenchée. Les conversions implicites ou explicites qui ne spécifient pas de style à partir de types de date et d'heure en littéraux de chaîne seront au format par défaut de la session active. Le tableau suivant montre les règles de conversion d'un littéral de chaîne en type de données datetimeoffset.
Littéral de chaîne d'entrée |
datetimeoffset(n) |
---|---|
ODBC DATE |
Les littéraux de chaîne ODBC sont mappés sur le type de données datetime. Toute opération d'affectation de littéraux ODBC DATETIME en des types datetimeoffset provoque une conversion implicite entre datetime et ce type, comme défini par les règles de conversion. |
ODBC TIME |
Consultez la règle DATE ODBC précédente. |
ODBC DATETIME |
Consultez la règle DATE ODBC précédente. |
DATE uniquement |
La partie TIME a pour valeur par défaut 00:00:00. TIMEZONE a pour valeur par défaut +00:00. |
TIME uniquement |
La partie DATE a pour valeur par défaut 1900-1-1. TIMEZONE aura pour valeur par défaut +00:00. |
TIMEZONE uniquement |
Les valeurs par défaut sont fournies |
DATE + TIME |
TIMEZONE a pour valeur par défaut +00:00. |
DATE + TIMEZONE |
Non autorisées |
TIME + TIMEZONE |
La partie DATE a pour valeur par défaut 1900-1-1. |
DATE + TIME + TIMEZONE |
Simple |
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'
,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 |