datetime2 (Transact-SQL)datetime2 (Transact-SQL)

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database ouiAzure SQL Data Warehouse ouiParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Définit une date qui est associée à une heure de la journée au format 24 heures.Defines a date that is combined with a time of day that is based on 24-hour clock. datetime2 peut être considéré comme une extension du type datetime existant qui a une plus grande plage de dates, une plus grande précision de fraction par défaut et une précision spécifiée par l’utilisateur facultative.datetime2 can be considered as an extension of the existing datetime type that has a larger date range, a larger default fractional precision, and optional user-specified precision.

Description de datetime2datetime2 description

PropriétéProperty ValeurValue
SyntaxeSyntax datetime2 [ (précision à la fraction de seconde) ]datetime2 [ (fractional seconds precision) ]
UtilisationUsage DECLARE @MyDatetime2 datetime2(7)DECLARE @MyDatetime2 datetime2(7)

CREATE TABLE Table1 ( Column1 datetime2(7) )CREATE TABLE Table1 ( Column1 datetime2(7) )
Format de littéral de chaîne par défautDefault string literal format

(utilisé pour le client de bas niveau)(used for down-level client)
AAAA-MM-JJ hh:mm:ss[.fractions de seconde]YYYY-MM-DD hh:mm:ss[.fractional seconds]

Pour plus d’informations, consultez la section « Compatibilité descendante pour les clients de bas niveau » ci-dessous.For more information, see the "Backward Compatibility for Down-level Clients" section that follows.
Plage de datesDate range 0001-01-01 à 9999-12-310001-01-01 through 9999-12-31

Du 1er janvier de l’an 1 au 31 décembre 9999January 1,1 CE through December 31, 9999 CE
Plage temporelleTime range 00:00:00 à 23:59:59.999999900:00:00 through 23:59:59.9999999
Plage de décalages de fuseau horaireTime zone offset range NoneNone
Plages d'élémentsElement ranges AAAA est un nombre de quatre chiffres, entre 0001 et 9999, qui représente une année.YYYY is a four-digit number, ranging from 0001 through 9999, that represents a year.

MM est un nombre à deux chiffres, entre 01 et 12, qui représente un mois dans l'année spécifiée.MM is a two-digit number, ranging from 01 to 12, that represents a month in the specified year.

DD est un nombre à deux chiffres, entre 01 et 31 selon le mois, qui représente un jour du mois spécifié.DD is a two-digit number, ranging from 01 to 31 depending on the month, that represents a day of the specified month.

hh est un nombre à deux chiffres, entre 00 et 23, qui représente l'heure.hh is a two-digit number, ranging from 00 to 23, that represents the hour.

mm est un nombre à deux chiffres, entre 00 et 59, qui représente la minute.mm is a two-digit number, ranging from 00 to 59, that represents the minute.

ss est un nombre à deux chiffres, entre 00 et 59, qui représente la seconde.ss is a two-digit number, ranging from 00 to 59, that represents the second.

n* est un nombre qui comprend entre zéro et sept chiffres, entre 0 et 9999999, qui représente les fractions de seconde.n* is a zero- to seven-digit number from 0 to 9999999 that represents the fractional seconds. Dans Informatica, les fractions de seconde sont tronquées quand n > 3.In Informatica, the fractional seconds will be truncated when n > 3.
Longueur de caractèreCharacter length 19 positions au minimum (AAAA-MM-JJ hh:mm:ss) et 27 au maximum (AAAA-MM-JJ hh:mm:ss.0000000)19 positions minimum (YYYY-MM-DD hh:mm:ss ) to 27 maximum (YYYY-MM-DD hh:mm:ss.0000000)
Précision, échellePrecision, scale De 0 à 7 chiffres, avec une précision de 100 ns.0 to 7 digits, with an accuracy of 100ns. La précision par défaut est de 7 chiffres.The default precision is 7 digits.
Taille de stockageStorage size 6 octets pour une précision inférieure à 3.6 bytes for precision less than 3.
7 octets pour une précision de 3 ou 4.7 bytes for precision 3 or 4.
Toutes les autres précisions nécessitent 8 octets.1All other precision require 8 bytes.1
PrécisionAccuracy 100 nanosecondes100 nanoseconds
Valeur par défautDefault value 1900-01-01 00:00:001900-01-01 00:00:00
CalendrierCalendar GrégorienGregorian
Précision à la fraction de seconde définie par l'utilisateurUser-defined fractional second precision OuiYes
Prise en charge et conservation du décalage de fuseau horaireTime zone offset aware and preservation NonNo
Prise en charge de l'heure d'étéDaylight saving aware NonNo

1 Le premier octet d’une valeur datetime2 stocke la précision de la valeur, ce qui signifie que le stockage réellement nécessaire pour une valeur datetime2 correspond à la taille de stockage indiquée dans le tableau ci-dessus, plus 1 octet supplémentaire pour stocker la précision.1 The first byte of a datetime2 value stores the precision of the value, which means the actual storage required for a datetime2 value is the storage size indicated in the table above plus 1 additional byte to store the precision. Ceci fait que la taille maximale d’une valeur datetime2 est de 9 octets : 1 octet pour stocker la précision, plus 8 octets pour stocker les données avec la précision maximale.This makes the maximum size of a datetime2 value 9 bytes - 1 byte stores precision plus 8 bytes for data storage at maximum precision.

Pour afficher les métadonnées de type de données, consultez sys.systypes (Transact-SQL) ou TYPEPROPERTY (Transact-SQL).For data type metadata, see sys.systypes (Transact-SQL) or TYPEPROPERTY (Transact-SQL). La précision et l'échelle sont variables pour certains types de données de date et d'heure.Precision and scale are variable for some date and time data types. Pour obtenir la précision et l’échelle d’une colonne, consultez COLUMNPROPERTY (Transact-SQL), COL_LENGTH (Transact-SQL) ou sys.columns (Transact-SQL).To obtain the precision and scale for a column, see COLUMNPROPERTY (Transact-SQL), COL_LENGTH (Transact-SQL), or sys.columns (Transact-SQL).

Formats de littéraux de chaîne pris en charge pour datetime2Supported string literal formats for datetime2

Les tableaux suivants répertorient les formats de littéraux de chaîne ISO 8601 et ODBC pris en charge pour datetime2.The following tables list the supported ISO 8601 and ODBC string literal formats for datetime2. 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 datetime2, consultez date (Transact-SQL) et time (Transact-SQL).For information about alphabetical, numeric, unseparated, and time formats for the date and time parts of datetime2, see date (Transact-SQL) and time (Transact-SQL).

ISO 8601ISO 8601 DescriptionsDescriptions
AAAA-MM-JJThh:mm:ss[.nnnnnnn]YYYY-MM-DDThh:mm:ss[.nnnnnnn]

AAAA-MM-JJThh:mm:ss[.nnnnnnn]YYYY-MM-DDThh:mm:ss[.nnnnnnn]
Ce format n'est pas affecté par les paramètres régionaux de session SET LANGUAGE et SET DATEFORMAT.This format is not affected by the SET LANGUAGE and SET DATEFORMAT session locale settings. T, le signe deux-points (:) et le point (.) sont inclus dans le littéral de chaîne, par exemple « 2007-05-02T19:58:47.1234567 ».The T, the colons (:) and the period (.) are included in the string literal, for example '2007-05-02T19:58:47.1234567'.
ODBCODBC DescriptionDescription
{ ts 'aaaa-mm-jj hh:mm:ss[.fractions de seconde]' }{ ts 'yyyy-mm-dd hh:mm:ss[.fractional seconds]' } Spécifique à l'API ODBC :ODBC API specific:

Le nombre de chiffres à droite de la virgule décimale, qui représente les fractions de seconde, peut être spécifié de 0 jusqu'à 7 (100 nanosecondes).The number of digits to the right of the decimal point, which represents the fractional seconds, can be specified from 0 up to 7 (100 nanoseconds).

Conformité ANSI et ISO 8601ANSI and ISO 8601 compliance

La conformité ANSI et ISO 8601 de date et time s’applique à datetime2.The ANSI and ISO 8601 compliance of date and time apply to datetime2.

Compatibilité descendante pour les clients de bas niveauBackward Compatibility for Down-level Clients

Certains clients de bas niveau ne prennent pas en charge les types de données time, date, datetime2 et datetimeoffset.Some down-level clients do not support the time, date, datetime2 and datetimeoffset data types. Le tableau suivant présente le type de mappage entre une instance de haut niveau de SQL ServerSQL Server et des clients de bas niveau.The following table shows the type mapping between an up-level instance of SQL ServerSQL Server and down-level clients.

Type de données SQL ServerSQL ServerSQL ServerSQL Server data type Format de littéral de chaîne par défaut passé au client de bas niveauDefault string literal format passed to down-level client ODBC de bas niveauDown-level ODBC OLEDB de bas niveauDown-level OLEDB JDBC de bas niveauDown-level JDBC SQLCLIENT de bas niveauDown-level SQLCLIENT
timetime hh:mm:ss [.nnnnnnn]hh:mm:ss[.nnnnnnn] SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String ou SqStringString or SqString
datedate AAAA-MM-JJYYYY-MM-DD SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String ou SqStringString or SqString
datetime2datetime2 AAAA-MM-JJ hh:mm:ss[.nnnnnnn]YYYY-MM-DD hh:mm:ss[.nnnnnnn] SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String ou SqStringString or SqString
datetimeoffsetdatetimeoffset AAAA-MM-JJ hh:mm:ss[.nnnnnnn] [+|-]hh:mmYYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String ou SqStringString or SqString

Conversion de données date et timeConverting date and time data

Lorsque vous effectuez une conversion vers des types de données date et heure, SQL ServerSQL Server rejette toutes les valeurs qu'il ne peut identifier comme dates ou heures.When you convert to date and time data types, SQL ServerSQL Server rejects all values it cannot recognize as dates or times. Pour plus d’informations sur l’utilisation des fonctions CAST et CONVERT avec des données date et time, consultez CAST et CONVERT (Transact-SQL)For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL)

Conversion d’autres types date et time en type de données datetime2Converting other date and time types to the datetime2 data type

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 datetime2.This section describes what occurs when other date and time data types are converted to the datetime2 data type.

Dans le cas d’une conversion à partir de date, l’année, le mois et le jour sont copiés.When the conversion is from date, the year, month and day are copied. Le composant heure est défini sur 00:00:00.0000000.The time component is set to 00:00:00.0000000. Le code suivant montre les résultats de la conversion d'une valeur date en valeur datetime2.The following code shows the results of converting a date value to a datetime2 value.

DECLARE @date date = '12-21-16';
DECLARE @datetime2 datetime2 = @date;

SELECT @datetime2 AS '@datetime2', @date AS '@date';
  
--Result  
--@datetime2                  @date
----------------------------- ----------
--2016-12-21 00:00:00.0000000 2016-12-21

Dans le cas d’une conversion à partir de time(n) , le composant heure est copié et le composant date est défini sur « 1900-01-01 ».When the conversion is from time(n), the time component is copied, and the date component is set to '1900-01-01'. L'exemple suivant montre les résultats de la conversion d'une valeur time(7) en valeur datetime2.The following example shows the results of converting a time(7) value to a datetime2 value.

DECLARE @time time(7) = '12:10:16.1234567';
DECLARE @datetime2 datetime2 = @time;

SELECT @datetime2 AS '@datetime2', @time AS '@time';
  
--Result  
--@datetime2                  @time
----------------------------- ----------------
--1900-01-01 12:10:16.1234567 12:10:16.1234567

Dans le cas d’une conversion à partir de smalldatetime, les heures et les minutes sont copiées.When the conversion is from smalldatetime, the hours and minutes are copied. Les secondes et fractions de seconde sont définies sur 0.The seconds and fractional seconds are set to 0. Le code suivant montre les résultats de la conversion d'une valeur smalldatetime en valeur datetime2.The following code shows the results of converting a smalldatetime value to a datetime2 value.

DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';
DECLARE @datetime2 datetime2 = @smalldatetime;

SELECT @datetime2 AS '@datetime2', @smalldatetime AS '@smalldatetime'; 
  
--Result  
--@datetime2                  @smalldatetime
----------------------------- -----------------------
--2016-12-01 12:32:00.0000000 2016-12-01 12:32:00 

Dans le cas d’une conversion à partir de datetimeoffset(n) , les composants date et heure sont copiés.When the conversion is from datetimeoffset(n), the date and time components are copied. Le fuseau horaire est tronqué.The time zone is truncated. L'exemple suivant montre les résultats de la conversion d'une valeur datetimeoffset(7) en valeur datetime2.The following example shows the results of converting a datetimeoffset(7) value to a datetime2 value.

DECLARE @datetimeoffset datetimeoffset(7) = '2016-10-23 12:45:37.1234567 +10:0';
DECLARE @datetime2 datetime2 = @datetimeoffset;

SELECT @datetime2 AS '@datetime2', @datetimeoffset AS '@datetimeoffset'; 
  
--Result  
--@datetime2                  @datetimeoffset
----------------------------- ----------------------------------
--2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00

Dans le cas d’une conversion à partir de datetime, la date et l’heure sont copiées.When the conversion is from datetime, the date and time are copied. La précision de fraction est étendue à 7 chiffres.The fractional precision is extended to 7 digits. L'exemple suivant montre les résultats de la conversion d'une valeur datetime en valeur datetime2.The following example shows the results of converting a datetime value to a datetime2 value.

DECLARE @datetime datetime = '2016-10-23 12:45:37.333';
DECLARE @datetime2 datetime2 = @datetime;

SELECT @datetime2 AS '@datetime2', @datetime AS '@datetime';
   
--Result  
--@datetime2                  @datetime
------------------------- ---------------------------
--2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333

Notes

Sous le niveau de compatibilité de base de données 130, les conversions implicites des types de données datetime en datetime2 offrent une meilleure précision en prenant en compte les fractions de milliseconde, ce qui génère différentes valeurs converties, comme illustré dans l’exemple ci-dessus.Under database compatibility level 130, implicit conversions from datetime to datetime2 data types show improved accuracy by accounting for the fractional milliseconds, resulting in different converted values, as seen in the example above. Utilisez un transtypage explicite vers le type de données datetime2 chaque fois qu’il existe un scénario de comparaison mixte entre les types de données datetime et datetime2.Use explicit casting to datetime2 datatype whenever a mixed comparison scenario between datetime and datetime2 datatypes exists. Pour plus d’informations, consultez cet article du Support technique Microsoft.For more information, refer to this Microsoft Support Article.

Conversion de littéraux de chaîne en datetime2Converting String Literals to datetime2

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.Conversions from string literals to date and time types are permitted if all parts of the strings are in valid formats. Sinon, une erreur d'exécution est déclenchée.Otherwise, a runtime error is raised. 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.Implicit conversions or explicit conversions that do not specify a style, from date and time types to string literals will be in the default format of the current session. Le tableau suivant montre les règles de conversion d’un littéral de chaîne en type de données datetime2.The following table shows the rules for converting a string literal to the datetime2 data type.

Littéral de chaîne d'entréeInput string literal datetime2(n)datetime2(n)
ODBC DATEODBC DATE Les littéraux de chaîne ODBC sont mappés au type de données datetime.ODBC string literals are mapped to the datetime data type. Toute opération d’affectation de littéraux ODBC DATETIME dans des types datetime2 provoque une conversion implicite entre datetime et ce type, comme défini par les règles de conversion.Any assignment operation from ODBC DATETIME literals into datetime2 types will cause an implicit conversion between datetime and this type as defined by the conversion rules.
ODBC TIMEODBC TIME Consultez la règle DATE ODBC précédente.See previous ODBC DATE rule.
ODBC DATETIMEODBC DATETIME Consultez la règle DATE ODBC précédente.See previous ODBC DATE rule.
DATE uniquementDATE only La partie TIME a pour valeur par défaut 00:00:00.The TIME part defaults to 00:00:00.
TIME uniquementTIME only La partie DATE a pour valeur par défaut 1900-1-1.The DATE part defaults to 1900-1-1.
TIMEZONE uniquementTIMEZONE only Les valeurs par défaut sont fournies.Default values are supplied.
DATE + TIMEDATE + TIME SimpleTrivial
DATE + TIMEZONEDATE + TIMEZONE Non autorisé.Not allowed.
TIME + TIMEZONETIME + TIMEZONE La partie DATE a pour valeur par défaut 1900-1-1.The DATE part defaults to 1900-1-1. L'entrée TIMEZONE est ignorée.TIMEZONE input is ignored.
DATE + TIME + TIMEZONEDATE + TIME + TIMEZONE Le DATETIME local sera utilisé.The local DATETIME will be used.

ExemplesExamples

L’exemple suivant compare les résultats de la conversion d’une chaîne en chaque type de données date et time.The following example compares the results of casting a string to each date and time data type.

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.Here is the result set.

Type de donnéesData type SortieOutput
timetime 12:35:29.12:35:29. 12345671234567
datedate 2007-05-082007-05-08
smalldatetimesmalldatetime 2007-05-08 12:35:002007-05-08 12:35:00
datetimedatetime 2007-05-08 12:35:29.1232007-05-08 12:35:29.123
datetime2datetime2 2007-05-08 12:35:29.2007-05-08 12:35:29. 12345671234567
datetimeoffsetdatetimeoffset 2007-05-08 12:35:29.1234567 +12:152007-05-08 12:35:29.1234567 +12:15

Voir aussiSee also

CAST et CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)