Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Относится к:База данных SQL Azure
SQL база данных в 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;