datetimeoffset (Transact-SQL)datetimeoffset (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 a data combinada com uma hora de um dia que possui reconhecimento de fuso horário e é baseada em um relógio de 24 horas.Defines a date that is combined with a time of a day that has time zone awareness and is based on a 24-hour clock.

Descrição DateTimeOffsetdatetimeoffset description

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

Criar tabela Table1 (Column1 datetimeoffset(7) )CREATE TABLE Table1 ( Column1 datetimeoffset(7) )
Formatos de literal de cadeia de caracteres padrão (usados para cliente de nível inferior)Default string literal formats (used for down-level client) AAAA-MM-DD HH [. nnnnnnn] [{+ |-} hh: mm]YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]

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

1 de janeiro de 1 CE até 31 de dezembro de 9999 CEJanuary 1, 1 CE through December 31, 9999 CE
Intervalo de horasTime range 00:00:00 por meio de 23:59:59.9999999 (segundos fracionários não têm suporte em Informatica)00:00:00 through 23:59:59.9999999 (fractional seconds are not supported in Informatica)
Intervalo de deslocamento de fuso horárioTime zone offset range -14:00 a + 14:00 (deslocamento de fuso horário é ignorado em Informatica)-14:00 through +14:00 (the time zone offset is ignored in Informatica)
Intervalos de elementosElement ranges AAAA são quatro dígitos, variando de 0001 a 9999, que representam um ano.YYYY is four digits, ranging from 0001 through 9999, that represent a year.

MM são dois dígitos, variando de 01 a 12, que representam um mês do ano especificado.MM is two digits, ranging from 01 to 12, that represent a month in the specified year.

DD são dois dígitos, variando de 01 a 31, dependendo do mês, que representam um dia do mês especificado.DD is two digits, ranging from 01 to 31 depending on the month, that represent a day of the specified month.

hh são dois dígitos, variando de 00 a 23, que representam a hora.hh is two digits, ranging from 00 to 23, that represent the hour.

mm são dois dígitos, variando de 00 a 59, que representam o minuto.mm is two digits, ranging from 00 to 59, that represent the minute.

ss são dois dígitos, variando de 00 a 59, que representam o segundo.ss is two digits, ranging from 00 to 59, that represent the second.

n* é de zero a sete dígitos, variando de 0 a 9999999, que representa as frações de segundo.n* is zero to seven digits, ranging from 0 to 9999999, that represent the fractional seconds. Não há suporte para frações de segundos em Informatica.Fractional seconds are not supported in Informatica.

hh são dois dígitos que abrangem de -14 a +14.hh is two digits that range from -14 to +14. O deslocamento de fuso horário é ignorado em Informatica.The time zone offset is ignored in Informatica.

mm são dois dígitos que abrangem de 00 a 59.mm is two digits that range from 00 to 59. O deslocamento de fuso horário é ignorado em Informatica.The time zone offset is ignored in Informatica.
Comprimento de caracteresCharacter length 26 posições no mínimo (AAAA-MM-DD HH {+ |-} hh: mm) a 34 no máximo (. AAAA-MM-DD nnnnnnn {+ |-} hh: mm)26 positions minimum (YYYY-MM-DD hh:mm:ss {+|-}hh:mm) to 34 maximum (YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm)
Precisão, escalaPrecision, scale Consulte a tabela a seguir.See the table below.
Tamanho de armazenamentoStorage size 10 bytes, fixos, é o padrão com o padrão de precisão de segundos fracionários de 100ns.10 bytes, fixed is the default with the default of 100ns fractional second precision.
PrecisãoAccuracy 100 nanossegundos100 nanoseconds
Valor padrãoDefault value 1900-01-01 00:00:00 00:001900-01-01 00:00: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 SimYes
Reconhecimento de horário de verãoDaylight saving aware NãoNo
Escala especificadaSpecified scale Resultado (precisão, escala)Result (precision, scale) Comprimento de coluna (bytes)Column length (bytes) Precisão de segundos fracionáriosFractional seconds precision
datetimeoffsetdatetimeoffset (34,7)(34,7) 1010 77
DateTimeOffset(0)datetimeoffset(0) (26,0)(26,0) 88 0-20-2
DateTimeOffset(1)datetimeoffset(1) (28,1)(28,1) 88 0-20-2
DateTimeOffset(2)datetimeoffset(2) (29,2)(29,2) 88 0-20-2
DateTimeOffset(3)datetimeoffset(3) (30,3)(30,3) 99 3-43-4
DateTimeOffset(4)datetimeoffset(4) (31,4)(31,4) 99 3-43-4
DateTimeOffset(5)datetimeoffset(5) (32,5)(32,5) 1010 5-75-7
DateTimeOffset(6)datetimeoffset(6) (33,6)(33,6) 1010 5-75-7
DateTimeOffset(7)datetimeoffset(7) (34,7)(34,7) 1010 5-75-7

Suporte para formatos de literal de cadeia de caracteres para datetimeoffsetSupported string literal formats for datetimeoffset

A tabela a seguir lista os formatos de literal de cadeia de caracteres com suporte do ISO 8601 para datetimeoffset.The following table lists the supported ISO 8601 string literal formats for datetimeoffset. Para obter informações sobre os formatos alfabéticos, numéricos, não separados e tempo para as partes de data e hora de datetimeoffset, consulte Data ( Transact-SQL ) e tempo ( Transact-SQL ) .For information about alphabetical, numeric, unseparated and time formats for the date and time parts of datetimeoffset, see date (Transact-SQL) and time (Transact-SQL).

ISO 8601ISO 8601 DescriptionDescription
AAAA-MM-ddTHH [. nnnnnnn] [{+ |-} hh: mm]YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm] Esses dois formatos não são afetados pelas configurações de localidade de sessão SET LANGUAGE e SET DATEFORMAT.These two formats are not affected by the SET LANGUAGE and SET DATEFORMAT session locale settings. Não são permitidos espaços entre o datetimeoffset e datetime partes.Spaces are not allowed between the datetimeoffset and the datetime parts.
AAAA-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC)YYYY-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC) Esse formato, pela definição ISO indica o datetime parte deve ser expresso em tempo Universal Coordenado (UTC).This format by ISO definition indicates the datetime portion should be expressed in Coordinated Universal Time (UTC). Por exemplo, 1999-12-12 12:30:30.12345 -07:00 deve ser representado como 1999-12-12 19:30:30.12345Z.For example, 1999-12-12 12:30:30.12345 -07:00 should be represented as 1999-12-12 19:30:30.12345Z.

Deslocamento de fuso horárioTime zone offset

Um deslocamento de fuso horário Especifica o deslocamento de fuso do UTC para um tempo ou datetime valor.A time zone offset specifies the zone offset from UTC for a time or datetime value. O deslocamento de fuso horário pode ser representado como [+|-] hh:mm:The time zone offset can be represented as [+|-] hh:mm:

  • hh são dois dígitos, que abrangem de 00 a 14, que representam o número de horas no deslocamento de fuso horário.hh is two digits that range from 00 to 14 and represent the number of hours in the time zone offset.
  • mm são dois dígitos, variando de 00 a 59, que representam o número de minutos adicionais no deslocamento de fuso horário.mm is two digits, ranging from 00 to 59, that represent the number of additional minutes in the time zone offset.
  • +(mais) ou – (menos) são sinais obrigatórios em um deslocamento de fuso horário.+ (plus) or – (minus) is the mandatory sign for a time zone offset. Indicam se o deslocamento de fuso horário é adicionado ou subtraído da hora UTC para se obter a hora local.This indicates whether the time zone offset is added or subtracted from the UTC time to obtain the local time. O intervalo válido de deslocamento de fuso horário vai de -14: 00 a +14: 00.The valid range of time zone offset is from -14:00 to +14:00.

O intervalo de deslocamento de fuso horário segue o padrão W3C XML para definição de esquema XSD e é ligeiramente diferente da definição padrão do SQL 2003, 12:59 a +14:00.The time zone offset range follows the W3C XML standard for XSD schema definition and is slightly different from the SQL 2003 standard definition, 12:59 to +14:00.

O parâmetro de tipo opcional precisão fracionária de segundos Especifica o número de dígitos para a parte fracionária dos segundos.The optional type parameter fractional seconds precision specifies the number of digits for the fractional part of the seconds. Esse valor pode ser um número inteiro com 0 a 7 (100 nanossegundos).This value can be an integer with 0 to 7 (100 nanoseconds). O padrão precisão fracionária de segundos é 100ns (sete dígitos para a parte fracionária dos segundos).The default fractional seconds precision is 100ns (seven digits for the fractional part of the seconds).

Os dados são armazenados no banco de dados e processados, comparados, classificados e indexados no servidor como em UTC.The data is stored in the database and processed, compared, sorted, and indexed in the server as in UTC. O deslocamento de fuso horário será preservado no banco de dados para recuperação.The time zone offset will be preserved in the database for retrieval.

O deslocamento de fuso horário fornecido será considerado como horário de verão (DST) com suporte e ajustado para qualquer dado datetime que está no período de DST.The given time zone offset will be assumed to be daylight saving time (DST) aware and adjusted for any given datetime that is in the DST period.

Para datetimeoffset digitar, UTC e local (para o deslocamento de fuso horário persistente ou convertido) datetime valor será validado durante insert, update, arithmetic, convert ou assign operações.For datetimeoffset type, both UTC and local (to the persistent or converted time zone offset) datetime value will be validated during insert, update, arithmetic, convert, or assign operations. A detecção de qualquer UTC inválido ou local (para o deslocamento de fuso horário persistente ou convertido) datetime valor irá gerar um erro de valor inválido.The detection of any invalid UTC or local (to the persistent or converted time zone offset) datetime value will raise an invalid value error. Por exemplo, 9999-12-31 10:10:00 é válido no UTC, mas excede em hora local para o deslocamento de fuso horário em +13:50.For example, 9999-12-31 10:10:00 is valid in UTC, but overflow in local time to the time zone offset +13:50.

Para converter uma data correspondente datetimeoffset valor em um destino de fuso horário, consulte AT TIME ZONE ( Transact-SQL ) .To convert a date to a corresponding datetimeoffset value in a target time zone, see AT TIME ZONE (Transact-SQL).

Conformidade com ANSI e ISO 8601ANSI and ISO 8601 compliance

As seções ANSI e ISO 8601 conformidade do data e tempo tópicos se aplicam a datetimeoffset.The ANSI and ISO 8601 Compliance sections of the date and time topics apply to datetimeoffset.

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)

Ao converter para data, o ano, mês e dia são copiados.When converting to date, the year, month, and day are copied. O código a seguir mostra os resultados da conversão de um valor datetimeoffset(4) em um valor date.The following code shows the results of converting a datetimeoffset(4) value to a date value.

DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10 +01:00';  
DECLARE @date date= @datetimeoffset;  

SELECT @datetimeoffset AS '@datetimeoffset ', @date AS 'date';  

--Result  
--@datetimeoffset                date  
-------------------------------- ----------  
--2025-12-10 12:32:10.0000 +01:0 2025-12-10  
--  
--(1 row(s) affected)  

Se a conversão é em time (n), o nosso, minuto, segundo e frações de segundo são copiados.If the conversion is to time(n), the our, minute, second, and fractional seconds are copied. O valor de fuso horário é truncado.The time zone value is truncated. Quando a precisão do DateTimeOffset (n) valor é maior que a precisão o time (n) , o valor é arredondado.When the precision of the datetimeoffset(n) value is greater than the precision of the time(n) value, the value is rounded up. O código a seguir mostra os resultados da conversão de um valor datetimeoffset(4) em um valor time(3).The following code shows the results of converting a datetimeoffset(4) value to a time(3) value.

DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10.1237 +01:0';  
DECLARE @time time(3) = @datetimeoffset;  

SELECT @datetimeoffset AS '@datetimeoffset ', @time AS 'time';  

--Result  
--@datetimeoffset                time  
-------------------------------- ------------  
-- 2025-12-10 12:32:10.1237 +01:00    12:32:10.124  

--  
--(1 row(s) affected)  

Ao converter paradatetime, os valores de data e hora são copiados e o fuso horário é truncado.When converting todatetime, the date and time values are copied, and the time zone is truncated. Quando a precisão fracionária de DateTimeOffset (n) valor é maior do que três dígitos, o valor é truncado.When the fractional precision of the datetimeoffset(n) value is greater than three digits, the value is truncated. O código a seguir mostra os resultados da conversão de um valor datetimeoffset(4) em um valor datetime.The following code shows the results of converting a datetimeoffset(4) value to a datetime value.

DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10.1237 +01:0';  
DECLARE @datetime datetime = @datetimeoffset;  

SELECT @datetimeoffset AS '@datetimeoffset ', @datetime AS 'datetime';  

--Result  
--@datetimeoffset                datetime  
-------------------------------- -----------------------  
--2025-12-10 12:32:10.1237 +01:0 2025-12-10 12:32:10.123  
--  
--(1 row(s) affected)  

Para conversões em smalldatetime, a data e horário é copiados.For conversions to smalldatetime, the date and hours are copied. Os minutos são arredondados em relação ao valor dos segundos e os segundos são definidos como 0.The minutes are rounded up with respect to the seconds value and seconds are set to 0. O código a seguir mostra os resultados da conversão de um valor datetimeoffset(3) em um valor smalldatetime.The following code shows the results of converting a datetimeoffset(3) value to a smalldatetime value.

DECLARE @datetimeoffset datetimeoffset(3) = '1912-10-25 12:24:32 +10:0';  
DECLARE @smalldatetime smalldatetime = @datetimeoffset;  

SELECT @datetimeoffset AS '@datetimeoffset', @smalldatetime AS '@smalldatetime';  

--Result  
--@datetimeoffset                @smalldatetime  
-------------------------------- -----------------------  
--1912-10-25 12:24:32.000 +10:00 1912-10-25 12:25:00  
--  
--(1 row(s) affected)  

Se a conversão é em datetime2, a data e hora são copiados para o datetime2 valor e o fuso horário é truncado.If the conversion is to datetime2(n), the date and time are copied to the datetime2 value, and the time zone is truncated. Quando a precisão do datetime2 valor é maior que a precisão o DateTimeOffset (n) valor, os segundos fracionários são truncados para se ajustar.When the precision of the datetime2(n) value is greater than the precision of the datetimeoffset(n) value, the fractional seconds are truncated to fit. O código a seguir mostra os resultados da conversão de um valor datetimeoffset(4) em um valor datetime2(3).The following code shows the results of converting a datetimeoffset(4) value to a datetime2(3) value.

DECLARE @datetimeoffset datetimeoffset(4) = '1912-10-25 12:24:32.1277 +10:0';  
DECLARE @datetime2 datetime2(3)=@datetimeoffset;  

SELECT @datetimeoffset AS '@datetimeoffset', @datetime2 AS '@datetime2';  

--Result  
@datetimeoffset                    @datetime2  
---------------------------------- ----------------------  
1912-10-25 12:24:32.1277 +10:00    1912-10-25 12:24:32.12  

--(1 row(s) affected)  

Conversão de tipo de dados datetimeoffset em outros data e tipos de tempoConverting datetimeoffset data type to other date and time types

A tabela a seguir descreve o que ocorre quando um datetimeoffset tipo de dados é convertido em outros tipos de dados de data e hora.The following table describes what occurs when a datetimeoffset data type is converted to other date and time data types.

Convertendo literais de cadeia de caracteres em datetimeoffsetConverting string literals to datetimeoffset

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 datetimeoffset tipo de dados.The following table shows the rules for converting a string literal to the datetimeoffset data type.

Literal de cadeia de caracteres de entradaInput string literal DateTimeOffset (n)datetimeoffset(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 datetimeoffset 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 datetimeoffset 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. TIMEZONE assume +00:00 como padrão.The TIMEZONE defaults to +00:00.
Apenas TIMETIME only A parte DATE assume 1900-1-1 como padrão.The DATE part defaults to 1900-1-1. TIMEZONE assumirá +00:00 como padrão.The TIMEZONE will default to +00:00.
Apenas TIMEZONETIMEZONE only Os valores padrão são fornecidosDefault values are supplied
DATE + TIMEDATE + TIME TIMEZONE assume +00:00 como padrão.The TIMEZONE defaults to +00:00.
DATE + TIMEZONEDATE + TIMEZONE Não permitidoNot allowed
TIME + TIMEZONETIME + TIMEZONE A parte DATE assume 1900-1-1 como padrão.The DATE part defaults to 1900-1-1.
DATE + TIME + TIMEZONEDATE + TIME + TIMEZONE TrivialTrivial

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'  
    ,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetimeoffset(7)) AS  
        'datetimeoffset IS08601';  

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

Tipo de dadosData type SaídaOutput
HoraTime 12:35:29.12:35:29. 12345671234567
DataDate 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)
FUSO horário ( Transact-SQL )AT TIME ZONE (Transact-SQL)