SET ЧАСОВОЙ ПОЯС (Transact-SQL)

Относится к:База данных SQL AzureSQL база данных в Microsoft Fabric

Оператор SET TIME ZONE Transact-SQL (T-SQL) используется для установки значения часового пояса в База данных SQL Azure и SQL базы данных в Microsoft Fabric.

Note

SET TIME ZONEне поддерживается в SQL Server или Управляемый экземпляр SQL Azure.

SET TIME ZONE переопределяет значение часового пояса на уровне базы данных или экземпляра. Значение часового пояса совпадает с столбцем name в представлении sys.time_zone_info системы.

Соглашения о синтаксисе Transact-SQL

Syntax

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

Аргументы

{ 'time_zone_value' | МЕСТНОЕ }

Указывает значение часового пояса. time_zone_value — nvarchar(128), при условии по умолчанию .LOCAL

Если LOCAL указано, то текущее значение часового пояса по умолчанию для сессии устанавливается на исходное значение сессии, которое может быть либо опцией с ограничением базы данных, либо экземпляром по умолчанию.

Список установленных часовых поясов отображается через вид sys.time_zone_info системы.

Замечания

Если SET TIME ZONE используется в T-SQL или динамическом SQL-пакете, то изменение применимо только к области выполнения модуля или динамического SQL-пакета. После завершения пакетного выполнения модуля или динамического SQL, настройка сессионного часового пояса возвращается к значению часового пояса, действующего перед выполнением модуля или динамического SQL-пакета.

Permissions

Требуется членство в роли общедоступной фиксированной базы данных.

Examples

Образцы кода в этой статье используют AdventureWorks2025, AdventureWorksDW2025или AdventureWorksLT2025 примерную базу данных, которую можно скачать из репозитория GitHub Azure Data Data SQL Samples Repository (Сэмпл SQL).

A. Просмотр текущих настроек часового пояса

Следующий запрос возвращает имя сервера, имя базы данных и версию продукта.

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

Следующий запрос перечисляет действительные часовые пояса, упорядоченные по их смещению UTC.

SELECT *
FROM sys.time_zone_info
ORDER BY current_utc_offset;

Следующий запрос проверяет текущее значение конфигурации TIME_ZONE с областью действия базы данных.

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

Если часовой пояс не установлен на уровне базы данных, по умолчанию установлен часовой пояс экземпляра. Настройка часового пояса для экземпляра зависит от платформы:

Platform Description
Windows Часовой пояс базовой операционной системы.
Linux Часовой пояс процесса SQL Server, который можно задать с помощью TZ переменной среды.
База данных SQL Azure Часовой пояс экземпляра SQL, который всегда соответствует UTC и сегодня его нельзя изменить.
Управляемый экземпляр Azure SQL Часовой пояс экземпляра SQL, который по умолчанию является UTC и может быть изменён при создании экземпляра только сегодня.

B. Установите часовой пояс на уровне базы данных

Следующий пример устанавливает часовой пояс базы данных по стандартному времени Новой Зеландии, затем рассматривает затронутые функции.

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

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone,
       CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset,
       SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime,
       CURRENT_TIMESTAMP AS CurrentLocalDateTime2,
       s.time_zone AS session_time_zone
FROM sys.dm_exec_sessions AS s
WHERE s.session_id = @@SPID;

C. Сбросьте часовой пояс с базой данных по умолчанию

Следующий пример возвращает часовой пояс с ограничением базы данных до LOCAL, затем рассматривает затронутые функции.

ALTER DATABASE SCOPED CONFIGURATION SET TIME_ZONE = LOCAL;

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone,
       CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset,
       SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime,
       CURRENT_TIMESTAMP AS CurrentLocalDateTime2,
       s.time_zone AS session_time_zone
FROM sys.dm_exec_sessions AS s
WHERE s.session_id = @@SPID;

D. Установите часовой пояс на уровне сессии

Следующий пример устанавливает часовой пояс сессии на тихоокеанское стандартное время, а затем на индийское стандартное время, при этом рассматриваются затронутые функции после каждого изменения.

SET TIME ZONE 'Pacific 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,
       s.time_zone AS session_time_zone
FROM sys.dm_exec_sessions AS s
WHERE s.session_id = @@SPID;
GO

SET TIME ZONE 'India 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,
       s.time_zone AS session_time_zone
FROM sys.dm_exec_sessions AS s
WHERE s.session_id = @@SPID;
GO

E. Сбросьте часовой пояс сессии по умолчанию

Следующий пример сбрасывает сессию до часового пояса по умолчанию экземпляра или платформы.

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,
       s.time_zone AS session_time_zone
FROM sys.dm_exec_sessions AS s
WHERE s.session_id = @@SPID;

F. Системные представления всегда возвращают часовой пояс экземпляра

Системные представления, включающие значения времени, всегда возвращают часовой пояс экземпляра, независимо от времени сессии или базы данных.

SET TIME ZONE 'India Standard Time';
GO

SELECT CURRENT_TIMEZONE_ID() as current_time_zone_id, *
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID;

SELECT CURRENT_TIMEZONE_ID() as current_time_zone_id, *
FROM sys.dm_exec_query_stats;

SELECT CURRENT_TIMEZONE_ID() as current_time_zone_id, *
FROM sys.objects;

SET TIME ZONE LOCAL;