datetimeoffset (Transact-SQL)

 

Publicado: dezembro de 2016

ESTE TÓPICO APLICA-SE A: simSQL Server (começando com o 2008)simBanco de Dados SQL do AzuresimAzure SQL Data Warehouse simParallel 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.

PropriedadeValue
SintaxeDateTimeOffset [(precisão fracionária de segundos)]
UsoDECLARAR @MyDatetimeoffset datetimeoffset(7)

CRIAR TABELA Table1 (Coluna1 datetimeoffset(7) )
Formatos de literal de cadeia de caracteres padrão (usados para cliente de nível inferior)AAAA-MM-DD HH [. nnnnnnn] [{+ |-} hh: mm]

Para obter mais informações, consulte a seção Compatibilidade com versões anteriores a seguir.
Intervalo de datas0001-01-01 a 9999-12-31

1º de janeiro de 1 CE até 31 de dezembro de 9999 CE
Intervalo de horas00:00:00 por meio de 23:59:59.9999999 (segundos fracionários não são suportados em Informatica)
Intervalo de deslocamento de fuso horário-14:00 a +&14;:00 (o deslocamento de fuso horário é ignorado em Informatica)
Intervalos de elementosAAAA 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. Não há suporte para frações de segundo em Informatica.

hh são dois dígitos que abrangem de -14 a +14. O deslocamento de fuso horário é ignorado em Informatica.

mm são dois dígitos que abrangem de 00 a 59. O deslocamento de fuso horário é ignorado em Informatica.
Comprimento de caracteres26 posições no mínimo (AAAA-MM-DD HH {+ & #124;-} hh: mm) a 34 no máximo (. AAAA-MM-DD nnnnnnn {+ & #124;-} hh: mm)
Precisão, escalaConsulte a tabela a seguir.
Tamanho de armazenamento10 bytes, fixos, é o padrão com o padrão de precisão de segundos fracionários de 100ns.
Precisão100 nanossegundos
Valor padrão1900-01-01 00:00:00 00:00
CalendárioGregoriano
Precisão de segundo fracionário definida pelo usuárioSim
Preservação e reconhecimento de deslocamento de fuso horárioSim
Reconhecimento de horário de verãoNão
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

A tabela a seguir lista os formatos de literal de cadeia de caracteres com suporte do ISO 8601 para 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 (. O Transact-SQL e&41; e tempo (. O Transact-SQL e&41;.

ISO 8601Description
AAAA-MM-ddTHH [. 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 o datetimeoffset e o datetime partes.
AAAA-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC)Este formato pela definição ISO indica o datetime parte deve ser expresso em tempo Universal Coordenado (UTC). Por exemplo, 1999-12-12 12:30:30.12345 -07:00 deve ser representado como 1999-12-12 19:30:30.12345Z.

Um deslocamento de fuso horário Especifica o deslocamento de fuso horário do UTC para um tempo ou datetime valor. 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 de deslocamento de fuso horário vai 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 precisão fracionária de segundos Especifica o número de dígitos para a parte fracionária de segundos. Esse valor pode ser um número inteiro com 0 a 7 (100 nanossegundos). O padrão precisão fracionária de segundos é 100ns (sete dígitos para a parte fracionária de 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.

O deslocamento de fuso horário fornecido será considerado como horário de verão (DST) ciente e ajustado para qualquer dado datetime que está no período de DST.

Para datetimeoffset Digite, UTC e local (para o deslocamento de fuso horário persistente ou convertido) datetime valor será validado durante a inserção, atualização, aritmética, converter ou atribuir operações. A detecção de qualquer UTC inválido ou local (para o deslocamento de fuso horário persistente ou convertido) datetime valor 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.

Para converter uma data em um correspondente datetimeoffset valor em um destino de fuso horário, consulte no FUSO HORÁRIO (. O Transact-SQL e&41;.

As seções ANSI e ISO 8601 conformidade o data e tempo tópicos se aplicam a datetimeoffset.

Alguns clientes de nível inferior não dão suporte a tempo, data, datetime2 e datetimeoffset tipos de dados. A tabela a seguir mostra o mapeamento de tipos entre uma instância de nível superior do SQL Server e clientes de nível inferior.

Tipos de dados do SQL ServerFormato de literal de cadeia de caracteres padrão passado ao cliente de nível inferiorODBC de nível inferiorOLEDB de nível inferiorJDBC de nível inferiorSQLCLIENT de nível inferior
tempohh:mm:ss[.nnnnnnn]SQL_WVARCHAR ou SQL_VARCHARDBTYPE_WSTR ou DBTYPE_STRJava.sql.StringCadeia de caracteres ou SqString
DataAAAA-MM-DDSQL_WVARCHAR ou SQL_VARCHARDBTYPE_WSTR ou DBTYPE_STRJava.sql.StringCadeia de caracteres ou SqString
datetime2AAAA-MM-DD hh:mm:ss[.nnnnnnn]SQL_WVARCHAR ou SQL_VARCHARDBTYPE_WSTR ou DBTYPE_STRJava.sql.StringCadeia de caracteres ou SqString
DateTimeOffsetAAAA-MM-DD HH [. nnnnnnn] [+ |-] hh: mmSQL_WVARCHAR ou SQL_VARCHARDBTYPE_WSTR ou DBTYPE_STRJava.sql.StringCadeia de caracteres ou SqString

Ao fazer a conversão em tipos de dados de data e hora, o SQL Server rejeita todos os valores que não pode reconhecer como datas ou horas. Para obter informações sobre como usar as funções CAST e CONVERT com dados de data e hora, consulte CAST e CONVERT (. O Transact-SQL e&41;

Durante a conversão
data, o ano, mês e dia são copiados. O código a seguir mostra os resultados da conversão de um valor datetimeoffset(4) em um valor date.

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 for time (n), a nossa, minuto, segundo e frações de segundo são copiados. O valor de fuso horário é truncado. Quando a precisão do DateTimeOffset (n) valor é maior que a precisão o time (n) o valor é arredondado. O código a seguir mostra os resultados da conversão de um valor datetimeoffset(4) em um valor time(3).

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. Quando a precisão fracionária de DateTimeOffset (n) valor é maior do que três dígitos, o valor é truncado. O código a seguir mostra os resultados da conversão de um valor datetimeoffset(4) em um valor datetime.

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 é copiado. Os minutos são arredondados em relação ao valor dos segundos e os segundos são definidos como 0. O código a seguir mostra os resultados da conversão de um valor datetimeoffset(3) em um valor smalldatetime.

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 for datetime2, a data e hora são copiados para o datetime2 valor e o fuso horário é truncado. 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. O código a seguir mostra os resultados da conversão de um valor datetimeoffset(4) em um valor datetime2(3).

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)  

Convertendo tipo de dados datetimeoffset em outros tipos de data e hora

A tabela a seguir descreve o que ocorre quando um datetimeoffset tipo de dados é convertido em outros tipos de dados de data e hora.

Convertendo literais de cadeia de caracteres em 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. Caso contrário, será gerado um erro de tempo de execução. 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. A tabela a seguir mostra as regras para converter uma cadeia de caracteres literal para o datetimeoffset tipo de dados.

Literal de cadeia de caracteres de entradaDateTimeOffset (n)
ODBC DATELiterais de cadeia de caracteres ODBC são mapeados para o datetime tipo de dados. Qualquer operação de atribuição de literais de ODBC DATETIME em datetimeoffset fará com que uma conversão implícita entre tipos datetime e esse tipo conforme definido pelas regras de conversão.
ODBC TIMEConsulte a regra de ODBC DATE anterior.
ODBC DATETIMEConsulte a regra de ODBC DATE anterior.
Apenas DATEA parte TIME assume 00:00:00 como padrão. TIMEZONE assume +00:00 como padrão.
Apenas TIMEA parte DATE assume 1900-1-1 como padrão. TIMEZONE assumirá +00:00 como padrão.
Apenas TIMEZONEOs valores padrão são fornecidos
DATE + TIMETIMEZONE assume +00:00 como padrão.
DATE + TIMEZONENão permitido
TIME + TIMEZONEA parte DATE assume 1900-1-1 como padrão.
DATE + TIME + TIMEZONETrivial

O exemplo a seguir compara os resultados da conversão de uma cadeia de caracteres para cada data e tempo tipo de dados.

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 dadosSaída
Tempo12:35:29. 1234567
Data2007-05-08
Smalldatetime2007-05-08 12:35:00
Data e hora2007-05-08 12:35:29.123
datetime22007-05-08 12:35:29. 1234567
DateTimeOffset2007-05-08 12:35:29.1234567 +12:15

CAST e CONVERT (. O Transact-SQL e&41;
FUSO HORÁRIO &(. O Transact-SQL e&41;

Contribuições da comunidade

ADICIONAR
Mostrar: