SET FUSO HORÁRIO (Transact-SQL)

Aplica-se a:Base de Dados SQL do AzureBase 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 na Base de Dados SQL do Azure e uma base de dados SQL na Microsoft Fabric.

Note

SET TIME ZONEnão é suportado no SQL Server nem no Azure SQL Managed Instance.

SET TIME ZONE sobrepõe o valor do fuso horário ao nível da base de dados ou da instância. O valor do fuso horário é o mesmo que a name coluna na vista do sistema sys.time_zone_info .

Transact-SQL convenções de sintaxe

Syntax

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

Arguments

{ 'time_zone_value' | 'LOCAL' }

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

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

Uma lista dos fusos horários instalados é exibida através da vista sys.time_zone_info sistema.

Remarks

Se SET TIME ZONE for usado num módulo T-SQL ou num lote SQL dinâmico, então a alteração aplica-se apenas ao âmbito de execução do módulo ou ao lote SQL dinâmico. Após a conclusão da execução do módulo ou do SQL dinâmico, a definição do fuso horário da sessão reverte para o valor do fuso horário em vigor antes da execução do módulo ou do lote SQL dinâmico.

Permissions

Requer a pertença ao papel de base de dados pública fixa.

Examples

Os exemplos de código neste artigo utilizam a base de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que pode descarregar a partir do repositório do GitHub Azure Data SQL Samples Repository.

A. Consulte as definições atuais do fuso horário

A consulta seguinte devolve o nome do servidor, nome da base de dados e versão do produto.

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

A consulta seguinte 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 seguinte verifica o valor atual da TIME_ZONE configuração com escopo da base de dados.

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

Se o fuso horário não estiver definido ao nível da base de dados, por defeito passa para o fuso horário da instância. A definição do fuso horário da instância depende da plataforma:

Platform Description
Windows O fuso horário do sistema operativo subjacente.
Linux O fuso horário do processo do SQL Server, que podes definir usando a TZ variável de ambiente.
Base de Dados SQL do Azure O fuso horário da instância SQL, que é sempre UTC e não pode ser alterado hoje.
Azure SQL Managed Instance O fuso horário da instância SQL, que é UTC por defeito e só pode ser modificado na altura da criação da instância hoje.

B. Defina o fuso horário ao nível da base de dados

O exemplo seguinte define o fuso horário definido pela base de dados para a Hora Padrão da Nova Zelândia, e depois revê 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 com escopo da base de dados para o padrão

O exemplo seguinte define o fuso horário com âmbito da base de dados de volta para LOCAL, e depois revê 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 ao nível da sessão

O exemplo seguinte define o fuso horário da sessão para a Hora Padrão do Pacífico e depois para a Hora Padrão da Índia, rever 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 seguinte 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 retornam sempre o fuso horário da instância

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

SELECT *
FROM sys.dm_exec_sessions;

SELECT *
FROM sys.dm_exec_query_stats;

SELECT *
FROM sys.objects;