Partilhar via


datetimeoffset (Transact-SQL)

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.

Para obter uma visão geral de todos os tipos de dados e funções de data e hora do Transact-SQL, consulte Funções Date e Time (Transact-SQL). Para obter informações e exemplos comuns aos tipos de dados e funções de data e hora, consulte Usando dados de data e hora.

Descrição datetimeoffset

Propriedade

Valor

Sintaxe

datetimeoffset [ (fractional seconds precision) ]

Uso

DECLARE @MyDatetimeoffset datetimeoffset(7)

CREATE TABLE Table1 ( Column1 datetimeoffset(7) )

Formatos de literal de cadeia de caracteres padrão (usados para cliente de nível inferior)

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

Para obter mais informações, consulte a seção "Compatibilidade com versões anteriores para clientes de nível inferior", em Usando dados de data e hora.

Intervalo de datas

01-01-0001 a 31-12-9999

1º de janeiro, 1 d.C. a 31 de dezembro, 9999 d.C.

Intervalo de horas

00:00:00 a 23:59:59.9999999

Intervalo de deslocamento de fuso horário

  • -14:00 a +14:00

Intervalos de elementos

AAAA são quatro dígitos, variando de 0001 a 9999, que representam um ano.

MM são dois dígitos, variando de 01 a 12, que representam um mês do ano especificado.

DD são dois dígitos, variando de 01 a 31, dependendo do mês, que representam um dia do mês especificado.

hh são dois dígitos, variando de 00 a 23, que representam a hora.

mm são dois dígitos, variando de 00 a 59, que representam o minuto.

ss são dois dígitos, variando de 00 a 59, que representam o segundo.

n* é de zero a sete dígitos, variando de 0 a 9999999, que representa as frações de segundo.

hh são dois dígitos que abrangem de -14 a +14.

mm são dois dígitos que abrangem de 00 a 59.

Comprimento de caracteres

26 posições no mínimo (AAAA-MM-DD hh:mm:ss {+|-}hh:mm) a 34 no máximo (AAAA-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm)

Precisão, escala

Escala especificadaResultado (precisão, escala)Comprimento de coluna (bytes)Precisão de segundos fracionários
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

Tamanho de armazenamento

10 bytes, fixos, é o padrão com o padrão de precisão de segundos fracionários de 100ns.

Exatidão

100 nanossegundos

Valor padrão

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

Calendário

Gregoriano

Precisão de frações de segundo definida pelo usuário

Sim

Preservação e reconhecimento de deslocamento de fuso horário

Sim

Reconhecimento de horário de verão

Não

Suporte para formatos de literal de cadeia de caracteres para datetimeoffset

A tabela a seguir lista os formatos de literal de cadeia de caracteres ISO 8601 que há suporte para datetimeoffset. Para obter informações sobre os formatos alfabéticos, numéricos, não separados e de hora para as partes de data e hora do datetimeoffset, consulte data (Transact-SQL) e hora (Transact-SQL).

ISO 8601

Descrição

AAAA-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. Não são permitidos espaços entre as partes datetimeoffset e datetime.

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

Esse formato, pela definição ISO, indica que a parte de datetime deve ser expressa em UTC (tempo universal coordenado). Por exemplo, 1999-12-12 12:30:30.12345 -07:00 deve ser representado como 1999-12-12 19:30:30.12345Z.

Deslocamento de fuso horário

Um deslocamento de fuso horário especifica o local da zona UTC para um valor de time ou datetime. O deslocamento de fuso horário pode ser representado como [+|-] 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.

  • 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.

  • + (mais) ou - (menos) são sinais obrigatórios em um deslocamento de fuso horário. Indicam se o deslocamento de fuso horário é adicionado ou subtraído da hora UTC para se obter a hora local. O intervalo válido do deslocamento de fuso horário varia de -14: 00 a +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.

O parâmetro de tipo opcional fractional seconds precision especifica o número de dígitos para a parte fracionária dos segundos. Esse valor pode ser um número inteiro com 0 a 7 (100 nanossegundos). O padrão fractional seconds precision é 100ns (sete dígitos para a parte fracionária dos segundos).

Os dados são armazenados no banco de dados e processados, comparados, classificados e indexados no servidor como em UTC. O deslocamento de fuso horário será preservado no banco de dados para recuperação.

Um determinado deslocamento de fuso horário será assumido como reconhecimento de DST (horário de verão) e ajustado para qualquer datetime fornecida que estiver no período de DST.

Para o tipo datetimeoffset, tanto o UTC quanto o valor datetime local (para o deslocamento de fuso horário persistente ou convertido) serão validados durante as operações insert, update, arithmetic, convert ou assign. A detecção de qualquer UTC inválido ou valor datetime local (para o deslocamento de fuso horário persistente ou convertido) causará um erro de valor inválido. 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.

Conformidade com ANSI e ISO 8601

As seções de conformidade com ANSI e ISO 8601 de tópicos de data e hora se aplicam a datetimeoffset.

Exemplos

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

Aqui está o conjunto de resultados.

Tipo de dados

Saída

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