AT TIME ZONE (Transact-SQL)AT TIME ZONE (Transact-SQL)

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure simAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Converte um inputdate para o valor de datetimeoffset correspondente no fuso horário de destino.Converts an inputdate to the corresponding datetimeoffset value in the target time zone. Quando inputdate é fornecido sem as informação de diferença, a função aplica a diferença do fuso horário considerando que inputdate está no fuso horário de destino.When inputdate is provided without offset information, the function applies the offset of the time zone assuming that inputdate is in the target time zone. Se inputdate for fornecido como um valor de datetimeoffset, a cláusula AT TIME ZONE o converterá no fuso horário de destino usando regras de conversão de fuso horário.If inputdate is provided as a datetimeoffset value, then AT TIME ZONE clause converts it into the target time zone using the time zone conversion rules.

A implementação de AT TIME ZONE depende de um mecanismo do Windows para converter os valores de datetime entre fusos horários.AT TIME ZONE implementation relies on a Windows mechanism to convert datetime values across time zones.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

inputdate AT TIME ZONE timezone  

ArgumentosArguments

inputdateinputdate
É uma expressão que pode ser resolvida para um valor de smalldatetime, datetime, datetime2 ou datetimeoffset.Is an expression that can be resolved to a smalldatetime, datetime, datetime2, or datetimeoffset value.

timezonetimezone
Nome do fuso horário de destino.Name of the destination time zone. O SQL ServerSQL Server baseia-se nos fusos horários armazenados no Registro do Windows.SQL ServerSQL Server relies on time zones that are stored in the Windows Registry. Os fusos horários instalados no computador são armazenados no hive do Registro a seguir: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones.Time zones installed on the computer are stored in the following registry hive: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones. Uma lista dos fusos horários instalados também é exposta por meio da exibição sys.time_zone_info (Transact-SQL).A list of installed time zones is also exposed through the sys.time_zone_info (Transact-SQL) view.

Tipos de retornoReturn Types

Retorna o tipo de dados de datetimeoffset.Returns the data type of datetimeoffset.

Valor retornadoReturn Value

O valor de datetimeoffset no fuso horário de destino.The datetimeoffset value in the target time zone.

RemarksRemarks

AT TIME ZONE aplica regras específicas para converter os valores de entrada nos tipos de dados smalldatetime, datetime e datetime2, que caem em um intervalo afetado por uma alteração de horário de verão:AT TIME ZONE applies specific rules for converting input values in smalldatetime, datetime, and datetime2 data types that fall into an interval affected by a DST change:

  • Quando o relógio está adiantado, há uma lacuna na hora local igual à duração do ajuste do relógio.When the clock's set ahead, there's a gap in local time equal to the duration of the clock adjustment. Esta duração é geralmente de 1 hora, mas pode ser de 30 ou 45 minutos, dependendo do fuso horário.This duration is usually 1 hour, but it can be 30 or 45 minutes, depending on time zone. Os pontos no tempo que pertencem a essa diferença são convertidos com a diferença depois da alteração do horário de verão.Points in time that are in this gap are converted with the offset after DST change.

    /*  
        Moving to DST in "Central European Standard Time" zone: 
        offset changes from +01:00 -> +02:00   
        Change occurred on March 29th, 2015 at 02:00:00.   
        Adjusted local time became 2015-03-29 03:00:00.  
    */  
    
    --Time before DST change has standard time offset (+01:00)
    SELECT CONVERT(datetime2(0), '2015-03-29T01:01:00', 126)     
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-03-29 01:01:00 +01:00   
    
    /*
      Adjusted time from the "gap interval" (between 02:00 and 03:00)
      is moved 1 hour ahead and presented with the summer time offset
      (after the DST change) 
    */
    SELECT CONVERT(datetime2(0), '2015-03-29T02:01:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-03-29 03:01:00 +02:00
    
    --Time after 03:00 is presented with the summer time offset (+02:00)
    SELECT CONVERT(datetime2(0), '2015-03-29T03:01:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-03-29 03:01:00 +02:00  
    
    
  • Quando o relógio for alterado novamente, 2 horas da hora local serão sobrepostas em uma hora.When the clock is set back, then 2 hours of local time are overlapped onto one hour. Nesse caso, os pontos no tempo que pertencem ao intervalo sobreposto são apresentados com a diferença antes da alteração do relógio:In that case, points in time that belong to the overlapped interval are presented with the offset before the clock change:

    /*  
        Moving back from DST to standard time in 
        "Central European Standard Time" zone: 
        offset changes from +02:00 -> +01:00.  
        Change occurred on October 25th, 2015 at 03:00:00.   
        Adjusted local time became 2015-10-25 02:00:00   
    */  
    
    --Time before the change has DST offset (+02:00)
    SELECT CONVERT(datetime2(0), '2015-10-25T01:01:00', 126)      
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-10-25 01:01:00 +02:00  
    
    /*
      Time from the "overlapped interval" is presented with standard time 
      offset (before the change)    
    */
    SELECT CONVERT(datetime2(0), '2015-10-25T02:00:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-10-25 02:00:00 +02:00  
    
    
    --Time after 03:00 is regularly presented with the standard time offset (+01:00)    
    SELECT CONVERT(datetime2(0), '2015-10-25T03:01:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-10-25 03:01:00 +01:00
    
    

Como algumas informações (como as regras de fuso horário) são mantidas fora do SQL ServerSQL Server e estão sujeitas a alterações ocasionais, a função AT TIME ZONE é classificada como não determinísticas.Since some information (such as timezone rules) is maintained outside of SQL ServerSQL Server and are subject to occasional change, the AT TIME ZONE function is classed as nondeterministic.

ExemplosExamples

A.A. Adicionar uma diferença de fuso horário de destino para datetime sem informação de diferençaAdd target time zone offset to datetime without offset information

Use AT TIME ZONE para adicionar uma diferença com base nas regras de fuso horário quando você souber que os valores de datetime originais são fornecidos no mesmo fuso horário:Use AT TIME ZONE to add offset based on time zone rules when you know that the original datetime values are provided in the same time zone:

USE AdventureWorks2016;  
GO  
  
SELECT SalesOrderID, OrderDate,   
    OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST  
FROM Sales.SalesOrderHeader;  

B.B. Converter valores entre fusos horários diferentesConvert values between different time zones

O exemplo a seguir converte os valores entre fusos horários diferentes:The following example converts values between different time zones:

USE AdventureWorks2016;  
GO  
  
SELECT SalesOrderID, OrderDate,   
    OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST,  
    OrderDate AT TIME ZONE 'Central European Standard Time' AS OrderDate_TimeZoneCET  
FROM Sales.SalesOrderHeader;  

C.C. Consultar tabelas temporais usando o fuso horário localQuery Temporal Tables using local time zone

O exemplo a seguir seleciona os dados de uma tabela temporal.The following example selects data from a temporal table.

USE AdventureWorks2016;  
GO  
  
DECLARE @ASOF datetimeoffset;  
SET @ASOF = DATEADD (month, -1, GETDATE()) AT TIME ZONE 'UTC';  
  
-- Query state of the table a month ago projecting period   
-- columns as Pacific Standard Time  
SELECT BusinessEntityID, PersonType, NameStyle, Title,   
    FirstName, MiddleName,  
    ValidFrom AT TIME ZONE 'Pacific Standard Time' 
FROM  Person.Person_Temporal  
FOR SYSTEM_TIME AS OF @ASOF;  

Consulte TambémSee Also

Tipos de data e hora Date and Time Types
Tipos de dados e funções de data e hora (Transact-SQL)Date and Time Data Types and Functions (Transact-SQL)