Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2016 (13.x) e versões
posteriores Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL analytics endpoint in Microsoft Fabric
Warehouse em Microsoft Fabric
SQL database in Microsoft Fabric
Converte uma inputdate para o valor datetimeoffset correspondente no fuso horário de destino. Quando inputdate é fornecido sem informações de deslocamento, a função aplica o deslocamento do fuso horário assumindo que inputdate está no fuso horário de destino. Se inputdate for fornecido como um valor datetimeoffset , a AT TIME ZONE cláusula o converterá no fuso horário de destino usando as regras de conversão de fuso horário.
AT TIME ZONE a implementação depende de um mecanismo do Windows para converter valores de data/hora entre fusos horários.
Transact-SQL convenções de sintaxe
Syntax
inputdate AT TIME ZONE timezone
Arguments
inputdate
Uma expressão que pode ser resolvida para um valor smalldatetime, datetime, datetime2 ou datetimeoffset.
timezone
Nome do fuso horário de destino. O SQL Server depende de fusos horários armazenados no Registro do Windows. Os fusos horários instalados no computador são armazenados na seguinte seção do Registro: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones. Uma lista de fusos horários instalados também é exposta através da visualização sys.time_zone_info .
Para obter mais informações sobre fusos horários para o SQL Server no Linux, consulte Configurar o fuso horário para o SQL Server 2022 e versões posteriores no Linux.
Tipos de devolução
Retorna o tipo de dados datetimeoffset.
Valor de retorno
O valor datetimeoffset no fuso horário de destino.
Remarks
AT TIME ZONE aplica regras específicas para converter valores de entrada em tipos de dados smalldatetime, datetime e datetime2 que se enquadram em um intervalo afetado por uma alteração de horário de verão:
Quando o relógio está adiantado, há uma diferença na hora local igual à duração do ajuste do relógio. Esta duração é geralmente de 1 hora, mas pode ser de 30 ou 45 minutos, dependendo do fuso horário. Os pontos no tempo que estão nessa lacuna são convertidos com o deslocamento após a alteração do horário de verão.
/* Moving to DST in "Central European Standard Time" zone: offset changes from +01:00 -> +02:00 Change occurred on March 27th, 2022 at 02:00:00. Adjusted local time became 2022-03-27 03:00:00. */ --Time before DST change has standard time offset (+01:00) SELECT CONVERT(DATETIME2(0), '2022-03-27T01:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 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), '2022-03-27T02:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 03:01:00 +02:00 --Time after 03:00 is presented with the summer time offset (+02:00) SELECT CONVERT(DATETIME2(0), '2022-03-27T03:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 03:01:00 +02:00Quando o relógio é atrasado, então 2 horas de hora local são sobrepostas em uma hora. Nesse caso, os pontos no tempo que pertencem ao intervalo sobreposto são apresentados com o deslocamento antes da mudança de relógio:
/* Moving back from DST to standard time in "Central European Standard Time" zone: offset changes from +02:00 -> +01:00. Change occurred on October 30th, 2022 at 03:00:00. Adjusted local time became 2022-10-30 02:00:00 */ --Time before the change has DST offset (+02:00) SELECT CONVERT(DATETIME2(0), '2022-10-30T01:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 01:01:00 +02:00 /* Time from the "overlapped interval" is presented with DST offset (before the change) */ SELECT CONVERT(DATETIME2(0), '2022-10-30T02:00:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 02:00:00 +02:00 --Time after 03:00 is regularly presented with the standard time offset (+01:00) SELECT CONVERT(DATETIME2(0), '2022-10-30T03:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 03:01:00 +01:00
Como algumas informações (como regras de fuso horário) são mantidas fora do SQL Server e estão sujeitas a alterações ocasionais, a AT TIME ZONE função é classificada como não determinística.
Embora o datetimeoffset não seja suportado no armazenamento de dados no Microsoft Fabric, AT TIME ZONE ainda pode ser usado com datetime2, como no exemplo a seguir.
Examples
A. Adicionar deslocamento de fuso horário de destino a datetime sem informações de deslocamento
Use AT TIME ZONE para adicionar deslocamento com base em regras de fuso horário quando souber que os valores datetime originais são fornecidos no mesmo fuso horário:
USE AdventureWorks2022;
GO
SELECT SalesOrderID, OrderDate,
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST
FROM Sales.SalesOrderHeader;
B. Converter valores entre fusos horários diferentes
O exemplo a seguir converte valores entre fusos horários diferentes. Os OrderDate valores são datetime e não são armazenados com um deslocamento, mas são conhecidos por serem Pacific Standard Time. O primeiro passo é atribuir o deslocamento conhecido e, em seguida, converter para o novo fuso horário:
USE AdventureWorks2022;
GO
SELECT SalesOrderID, OrderDate,
--Assign the known offset only
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST,
--Assign the known offset, then convert to another time zone
OrderDate AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE 'Central European Standard Time' AS OrderDate_TimeZoneCET
FROM Sales.SalesOrderHeader;
Você também pode substituir em uma variável local que contém o fuso horário:
USE AdventureWorks2022;
GO
DECLARE @CustomerTimeZone nvarchar(128) = 'Central European Standard Time';
SELECT SalesOrderID, OrderDate,
--Assign the known offset only
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST,
--Assign the known offset, then convert to another time zone
OrderDate AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE @CustomerTimeZone AS OrderDate_TimeZoneCustomer
FROM Sales.SalesOrderHeader;
C. Consultar tabelas temporais usando um fuso horário específico
O exemplo a seguir seleciona dados de uma tabela temporal usando a Hora Padrão do Pacífico.
USE AdventureWorks2022;
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;