SET FUSO HORÁRIO (Transact-SQL)

Aplica-se a:Banco de Dados SQL do AzureBanco de dados SQL no Microsoft Fabric

A SET TIME ZONE instrução Transact-SQL (T-SQL) é usada para definir um valor de fuso horário em Banco de Dados SQL do Azure e banco de dados SQL em Microsoft Fabric.

Note

SET TIME ZONEnão é suportado no SQL Server ou no Instância Gerenciada de SQL do Azure.

SET TIME ZONE sobrepõe o valor do fuso horário em nível de banco de dados ou instância. O valor do fuso horário é o mesmo da name coluna na visualização do sistema sys.time_zone_info .

Convenções de sintaxe do Transact-SQL

Syntax

SET TIME ZONE { 'time_zone_value' | 'LOCAL' }
[ ; ]

Argumentos

{ 'time_zone_value' | 'LOCAL' }

Especifica o valor do fuso horário. time_zone_value é nvarchar(128), com padrão de LOCAL.

Se LOCAL for especificado, então o valor padrão atual do fuso horário da sessão é definido para o valor original do fuso horário da sessão, que pode ser opção com escopo de banco de dados ou o padrão da instância.

Uma lista dos fusos horários instalados é exibida pela visão sys.time_zone_info sistema.

Observações

Se SET TIME ZONE for usado em um módulo T-SQL ou em um lote SQL dinâmico, então a mudança se aplica apenas ao escopo de execução do módulo ou lote SQL dinâmico. Após a conclusão da execução do módulo ou do SQL dinâmico, a configuração do fuso horário da sessão retorna ao valor do fuso horário em vigor antes da execução do módulo ou do batch SQL dinâmico.

Permissions

Requer associação na função de banco de dados fixa pública.

Examples

Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que você pode baixar do repositório do GitHub Azure Data SQL Samples Repository.

A. Veja as configurações atuais de fuso horário

A consulta a seguir retorna o nome do servidor, nome do banco de dados e versão do produto.

SELECT @@servername AS ServerName,
       DB_NAME() AS DatabaseName,
       SERVERPROPERTY('ResourceVersion') AS ProductVersion;

A consulta a seguir lista os fusos horários válidos, ordenados pelo seu deslocamento UTC.

SELECT *
FROM sys.time_zone_info
ORDER BY current_utc_offset;

A consulta a seguir verifica o valor atual da TIME_ZONE configuração com escopo do banco de dados.

SELECT *
FROM sys.database_scoped_configurations
WHERE name = 'TIME_ZONE';

Se o fuso horário não estiver definido no nível do banco de dados, ele é definido para o fuso horário da instância. A configuração do fuso horário da instância depende da plataforma:

Platform Description
Windows O fuso horário do sistema operacional subjacente.
Linux O fuso horário do processo do SQL Server, que você pode definir usando a TZ variável de ambiente.
Banco de Dados SQL do Azure O fuso horário da instância SQL, que é sempre UTC e não pode ser alterado hoje.
Instância Gerenciada de SQL do Azure O fuso horário da instância SQL, que é UTC por padrão e só pode ser modificado na época da criação da instância hoje.

B. Defina o fuso horário no nível do banco de dados

O exemplo a seguir define o fuso horário com escopo do banco de dados para o Horário Padrão da Nova Zelândia, e então revisa as funções afetadas.

ALTER DATABASE SCOPED CONFIGURATION SET TIME_ZONE = 'New Zealand Standard Time';
GO

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone,
       CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset,
       SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime3,
       CURRENT_TIMESTAMP AS CurrentLocalDateTime4;

C. Redefinir o fuso horário escopado pelo banco de dados para o padrão

O exemplo a seguir define o fuso horário com escopo do banco de dados para LOCAL, e depois revisa as funções afetadas.

ALTER DATABASE SCOPED CONFIGURATION SET TIME_ZONE = LOCAL;
GO

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone,
       CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset,
       SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime,
       CURRENT_TIMESTAMP AS CurrentLocalDateTime2;

D. Defina o fuso horário no nível da sessão

O exemplo a seguir define o fuso horário da sessão para o Horário Padrão do Pacífico e depois para o Horário Padrão da Índia, revisando as funções afetadas após cada alteração.

SET TIME ZONE 'Pacific Standard Time';

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone, CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset, SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime3, CURRENT_TIMESTAMP AS CurrentLocalDateTime4;
GO

SET TIME ZONE 'India Standard Time';

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone, CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset, SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime3, CURRENT_TIMESTAMP AS CurrentLocalDateTime4;

E. Redefinir o fuso horário da sessão para o padrão

O exemplo a seguir reinicia a sessão para o fuso horário padrão da instância ou plataforma.

SET TIME ZONE local;
GO

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone,
       CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset,
       SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime3,
       CURRENT_TIMESTAMP AS CurrentLocalDateTime4;

F. As visualizações do sistema sempre retornam o fuso horário da instância

Visualizações de sistema que incluem valores de tempo sempre retornam o fuso horário da instância, independentemente do fuso horário da sessão ou do banco de dados.

SELECT *
FROM sys.dm_exec_sessions;

SELECT *
FROM sys.dm_exec_query_stats;

SELECT *
FROM sys.objects;