Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Obter o fuso horário atual do servidor no SQL Server (T-SQL)


A Microsoft introduziu o CURRENT_TIMEZONE() função no SQL Server 2019 para retornar o fuso horário do servidor.

Mais especificamente, esta função “retorna o nome do fuso horário observado por um servidor ou uma instância”.

Exemplo


Aqui está um exemplo para demonstrar.
SELECT CURRENT_TIMEZONE();

Resultado:
(UTC) Coordinated Universal Time

Nesse caso, o fuso horário da minha instância do SQL Server é UTC.

Eu posso ver isso quando executo funções como SYSDATETIMEOFFSET() .
SELECT SYSDATETIMEOFFSET();

Resultado:
2020-04-01 00:14:44.0470785 +00:00

O UTC tem um deslocamento de fuso horário de +00:00 (sem deslocamento), e isso é refletido quando eu retorno a data e a hora do sistema.

Versões anteriores do SQL Server


Se eu executar CURRENT_TIMEZONE() contra minha instância do SQL Server 2017, aqui está o que recebo.
SELECT CURRENT_TIMEZONE();

Resultado:
Msg 195, Level 15, State 10, Line 1
'CURRENT_TIMEZONE' is not a recognized built-in function name.

Eu até baixei o contêiner do Docker mais recente com o SQL Server 2017 para Linux para verificar isso, mas ainda recebo esse erro.

Também verifiquei outras instalações do SQL Server 2017, mas com o mesmo resultado.

Na seção de comentários de sua documentação online para esta função, a Microsoft insinuou que CURRENT_TIMEZONE() será portado para versões anteriores do SQL Server, mas isso não parece ter acontecido até o momento.

Enquanto isso, você pode tentar o seguinte código.
DECLARE @TimeZone VARCHAR(50)
EXEC MASTER.dbo.xp_regread 'HKEY_LOCAL_MACHINE',
'SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
'TimeZoneKeyName',@TimeZone OUT
SELECT @TimeZone

Resultado:
UTC

Eu executei isso na mesma instância do SQL Server 2017 que não suporta CURRENT_TIMEZONE() , e funcionou muito bem.

Obviamente, seu resultado dependerá de onde seu servidor está localizado (ou pelo menos, para qual fuso horário ele foi configurado). Aqui está o que eu recebo se eu executar esta instrução em outro servidor:
W. Europe Standard Time

O SQL Server também tem uma exibição do sistema que permite retornar uma lista de fusos horários com suporte, que você pode usar para verificar seus resultados aqui.