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

ESTE TÓPICO APLICA-SE A: simSQL Server (a partir de 2008)simBanco de Dados SQL do Microsoft AzuresimAzure SQL Data Warehouse simParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Define uma data combinada com uma hora do dia que se baseia em um período de 24 horas.Defines a date that is combined with a time of day that is based on 24-hour clock. datetime2 pode ser considerado como uma extensão existente datetime tipo que tem um intervalo de datas maior, uma precisão fracionária padrão mais e precisão opcional especificada pelo usuário.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.

Descrição de datetime2datetime2 description

PropriedadeProperty ValorValue
SintaxeSyntax datetime2 [(precisão fracionária de segundos)]datetime2 [ (fractional seconds precision) ]
UsoUsage DECLARAR @MyDatetime2 datetime2 (7)DECLARE @MyDatetime2 datetime2(7)

Criar tabela Table1 (Column1 datetime2 (7) )CREATE TABLE Table1 ( Column1 datetime2(7) )
Formato literal de cadeia de caracteres padrãoDefault string literal format

(usado para cliente de nível inferior)(used for down-level client)
YYYY-MM-DD hh:mm:ss[segundos fracionários]YYYY-MM-DD hh:mm:ss[.fractional seconds]

Para obter mais informações, consulte a seção Compatibilidade com versões anteriores a seguir.For more information, see the "Backward Compatibility for Down-level Clients" section that follows.
Intervalo de datasDate range 0001-01-01 a 9999-12-310001-01-01 through 9999-12-31

Janeiro 1,1 CE até 31 de dezembro de 9999 CEJanuary 1,1 CE through December 31, 9999 CE
Intervalo de horasTime range 00:00:00 a 23:59:59.999999900:00:00 through 23:59:59.9999999
Intervalo de deslocamento de fuso horárioTime zone offset range NenhumaNone
Intervalos de elementosElement ranges AAAA é um número de quatro dígitos, variando de 0001 a 9.999, que representa um ano.YYYY is a four-digit number, ranging from 0001 through 9999, that represents a year.

MM é um número de dois dígitos, variando de 01 a 12 e representa um mês no ano especificado.MM is a two-digit number, ranging from 01 to 12, that represents a month in the specified year.

DD é um número de dois dígitos, variando de 01 a 31, dependendo do mês e representa um dia do mês especificado.DD is a two-digit number, ranging from 01 to 31 depending on the month, that represents a day of the specified month.

hh é um número de dois dígitos, variando de 00 a 23, que representa a hora.hh is a two-digit number, ranging from 00 to 23, that represents the hour.

mm é um número de dois dígitos, variando de 00 a 59, que representa o minuto.mm is a two-digit number, ranging from 00 to 59, that represents the minute.

ss é um número de dois dígitos, variando de 00 a 59, que representa o segundo.ss is a two-digit number, ranging from 00 to 59, that represents the second.

n* é um número de zero a sete dígitos, variando de 0 a 9999999, que representa as frações de segundo.n* is a zero- to seven-digit number from 0 to 9999999 that represents the fractional seconds. Em Informatica, as frações de segundo serão truncados quando n > 3.In Informatica, the fractional seconds will be truncated when n > 3.
Comprimento de caracteresCharacter length 19 posições no mínimo (YYYY-MM-DD hh:mm:ss ) a 27 no máximo (YYYY-MM-DD hh:mm:ss.0000000)19 positions minimum (YYYY-MM-DD hh:mm:ss ) to 27 maximum (YYYY-MM-DD hh:mm:ss.0000000)
Precisão, escalaPrecision, scale 0 a 7 dígitos, com exatidão de 100ns.0 to 7 digits, with an accuracy of 100ns. A precisão padrão é 7 dígitos.The default precision is 7 digits.
Tamanho de armazenamentoStorage size 6 bytes para precisões menores que 3; 7 bytes para precisões 3 e 4.6 bytes for precisions less than 3; 7 bytes for precisions 3 and 4. Todas as outras precisões exigem 8 bytes.All other precisions require 8 bytes.
PrecisãoAccuracy 100 nanossegundos100 nanoseconds
Valor padrãoDefault value 1900-01-01 00:00:001900-01-01 00:00:00
CalendárioCalendar GregorianoGregorian
Precisão de segundo fracionário definida pelo usuárioUser-defined fractional second precision SimYes
Preservação e reconhecimento de deslocamento de fuso horárioTime zone offset aware and preservation NãoNo
Reconhecimento de horário de verãoDaylight saving aware NãoNo

Para os metadados de tipo de dados, consulte sys. systypes ( Transact-SQL ) ou TYPEPROPERTY ( Transact-SQL ) .For data type metadata, see sys.systypes (Transact-SQL) or TYPEPROPERTY (Transact-SQL). Precisão e escala são variáveis para alguns tipos de data e data/hora.Precision and scale are variable for some date and time data types. Para obter a precisão e escala de uma coluna, consulte COLUMNPROPERTY ( Transact-SQL ) , COL_LENGTH ( Transact-SQL ) , ou 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).

Suporte para formatos de literal de cadeia de caracteres para datetime2Supported string literal formats for datetime2

As tabelas seguintes listam os formatos com suporte ISO 8601 e ODBC cadeia de caracteres literal para datetime2.The following tables list the supported ISO 8601 and ODBC string literal formats for datetime2. Para obter informações sobre os formatos alfabéticos, numéricos, não separados e tempo para as partes de data e hora de datetime2, consulte Data ( Transact-SQL ) e tempo ( 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 DescriçõesDescriptions
AAAA-MM-DDThh:mm:ss[.nnnnnnn]YYYY-MM-DDThh:mm:ss[.nnnnnnn]

AAAA-MM-DDThh:mm:ss[.nnnnnnn]YYYY-MM-DDThh:mm:ss[.nnnnnnn]
Esse formato não é afetado pelas configurações de localidade da sessão SET LANGUAGE e SET DATEFORMAT.This format is not affected by the SET LANGUAGE and SET DATEFORMAT session locale settings. O T, os dois-pontos (:) e o ponto (.) são incluídos na cadeia de caracteres literal, por exemplo ' 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 'yyyy-mm-dd hh:mm:ss[.segundos fracionários]' }{ ts 'yyyy-mm-dd hh:mm:ss[.fractional seconds]' } Específico de API ODBC:ODBC API specific:

O número de dígitos à esquerda do ponto decimal, que representa os segundos fracionários, pode ser especificado de 0 até 7 (100 nanossegundos).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).

Conformidade com ANSI e ISO 8601ANSI and ISO 8601 compliance

A conformidade ANSI e ISO 8601 de data e tempo se aplicam a datetime2.The ANSI and ISO 8601 compliance of date and time apply to datetime2.

Compatibilidade com versões anteriores de clientes de nível inferiorBackward Compatibility for Down-level Clients

Alguns clientes de nível inferior não dão suporte a tempo, data, datetime2 e datetimeoffset tipos de dados.Some down-level clients do not support the time, date, datetime2 and datetimeoffset data types. A tabela a seguir mostra o mapeamento de tipos entre uma instância de nível superior do SQL ServerSQL Server e clientes de nível inferior.The following table shows the type mapping between an up-level instance of SQL ServerSQL Server and down-level clients.

Tipos de dados do SQL ServerSQL Server SQL ServerSQL Server data type Formato de literal de cadeia de caracteres padrão passado ao cliente de nível inferiorDefault string literal format passed to down-level client ODBC de nível inferiorDown-level ODBC OLEDB de nível inferiorDown-level OLEDB JDBC de nível inferiorDown-level JDBC SQLCLIENT de nível inferiorDown-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 Cadeia de caracteres ou SqStringString or SqString
datedate AAAA-MM-DDYYYY-MM-DD SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String Cadeia de caracteres ou SqStringString or SqString
datetime2datetime2 AAAA-MM-DD 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 Cadeia de caracteres ou SqStringString or SqString
datetimeoffsetdatetimeoffset AAAA-MM-DD HH [. 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 Cadeia de caracteres ou SqStringString or SqString

Conversão de dados de data e horaConverting date and time data

Ao fazer a conversão em tipos de dados de data e hora, o SQL ServerSQL Server rejeita todos os valores que não pode reconhecer como datas ou horas.When you convert to date and time data types, SQL ServerSQL Server rejects all values it cannot recognize as dates or times. Para obter informações sobre como usar as funções CAST e CONVERT com dados de data e hora, consulte CAST e CONVERT ( Transact-SQL )For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL)

Conversão de outros tipos de data e hora para o tipo de dados datetime2Converting other date and time types to the datetime2 data type

Esta seção descreve o que acontece quando outros tipos de dados de data e hora são convertidos para o datetime2 tipo de dados.This section describes what occurs when other date and time data types are converted to the datetime2 data type.

Quando a conversão for de data, o ano, mês e dia são copiados.When the conversion is from date, the year, month and day are copied. O componente de hora é definido como 00:00:00.0000000.The time component is set to 00:00:00.0000000. O código a seguir mostra os resultados da conversão de um valor date em um valor 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

Quando a conversão for de time (n), o componente de hora é copiado e o componente de data é definido como ' 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'. O exemplo a seguir mostra os resultados da conversão de um valor time(7) em um valor 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

Quando a conversão for de smalldatetime, as horas e minutos são copiados.When the conversion is from smalldatetime, the hours and minutes are copied. Os segundos e as frações de segundo são definidos como 0.The seconds and fractional seconds are set to 0. O código a seguir mostra os resultados da conversão de um valor smalldatetime em um valor 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 

Quando a conversão for de DateTimeOffset (n), os componentes de data e hora são copiados.When the conversion is from datetimeoffset(n), the date and time components are copied. O fuso horário é truncado.The time zone is truncated. O exemplo a seguir mostra os resultados da conversão de um valor datetimeoffset(7) em um valor 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

Quando a conversão for de datetime, a data e hora são copiados.When the conversion is from datetime, the date and time are copied. A precisão fracionária é estendida para 7 dígitos.The fractional precision is extended to 7 digits. O exemplo a seguir mostra os resultados da conversão de um valor datetime em um valor 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

Convertendo literais de cadeia de caracteres em datetime2Converting String Literals to datetime2

Serão permitidas conversões de literais de cadeia de caracteres para tipos de data e hora se todas as partes da cadeia de caracteres estiverem em formatos válidos.Conversions from string literals to date and time types are permitted if all parts of the strings are in valid formats. Caso contrário, será gerado um erro de tempo de execução.Otherwise, a runtime error is raised. As conversões implícitas ou explícitas que não especificam um estilo, de tipos de data e hora em literais de cadeia de caracteres estarão no formato padrão da sessão atual.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. A tabela a seguir mostra as regras para converter uma cadeia de caracteres literal para o datetime2 tipo de dados.The following table shows the rules for converting a string literal to the datetime2 data type.

Literal de cadeia de caracteres de entradaInput string literal datetime2datetime2(n)
ODBC DATEODBC DATE Literais de cadeia de caracteres ODBC são mapeados para o datetime tipo de dados.ODBC string literals are mapped to the datetime data type. Qualquer operação de atribuição de literais de ODBC DATETIME em datetime2 tipos fará com que uma conversão implícita entre datetime e esse tipo conforme definido pelas regras de conversão.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 Consulte a regra de ODBC DATE anterior.See previous ODBC DATE rule.
ODBC DATETIMEODBC DATETIME Consulte a regra de ODBC DATE anterior.See previous ODBC DATE rule.
Apenas DATEDATE only A parte TIME assume 00:00:00 como padrão.The TIME part defaults to 00:00:00.
Apenas TIMETIME only A parte DATE assume 1900-1-1 como padrão.The DATE part defaults to 1900-1-1.
Apenas TIMEZONETIMEZONE only Os valores padrão são fornecidos.Default values are supplied.
DATE + TIMEDATE + TIME TrivialTrivial
DATE + TIMEZONEDATE + TIMEZONE Não permitido.Not allowed.
TIME + TIMEZONETIME + TIMEZONE A parte DATE assume 1900-1-1 como padrão.The DATE part defaults to 1900-1-1. A entrada TIMEZONE é ignorada.TIMEZONE input is ignored.
DATE + TIME + TIMEZONEDATE + TIME + TIMEZONE O DATETIME local será usado.The local DATETIME will be used.

ExemplosExamples

O exemplo a seguir compara os resultados da conversão de uma cadeia de caracteres para cada data e tempo tipo de dados.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';  

Aqui está o conjunto de resultados.Here is the result set.

Tipo de dadosData type SaídaOutput
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

Consulte tambémSee also

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