适用于:Azure SQL 数据库
Microsoft Fabric中的SQL数据库
SET TIME ZONE Transact-SQL(T-SQL)语句用于在Azure SQL 数据库中设置时区值,在Microsoft Fabric中设置SQL数据库。
注释
SET TIME ZONE不支持 SQL Server 或 Azure SQL 托管实例。
SET TIME ZONE 覆盖数据库或实例级时区值。 时区值与namesys.time_zone_info系统视图中的列相同。
Syntax
SET TIME ZONE { 'time_zone_value' | 'LOCAL' }
[ ; ]
Arguments
{ 'time_zone_value' |'本地' }
指定时区值。
time_zone_value 是 nvarchar(128),默认为 LOCAL。
如果 LOCAL 指定了,则会话当前默认时区值将设置为会话的原始时区值,这可以是数据库范围选项或实例默认值。
通过 sys.time_zone_info 系统视图,会显示已安装的时区列表。
Remarks
如果 SET TIME ZONE 被用于 T-SQL 模块或动态 SQL 批处理,则变更仅适用于模块或动态 SQL 批处理的执行范围。 模块或动态SQL批处理完成后,会话时区设置会恢复为模块或动态SQL批处理执行前生效的时区值。
Permissions
需要 公共 固定数据库角色的成员身份。
Examples
本文中的代码示例使用AdventureWorks2025了 、 AdventureWorksDW2025或AdventureWorksLT2025示例数据库,您可以从 Azure Data SQL Samples Repository 的 GitHub 仓库下载。
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';
如果数据库层面没有设置时区,它默认是实例时区。 实例时区设置取决于平台:
| 平台 | Description |
|---|---|
| Windows操作系统 | 底层操作系统的时区。 |
| Linux | 这是SQL Server进程的时区,你可以用TZ环境变量设置。 |
| Azure SQL 数据库 | SQL实例的时区,始终是UTC,今天不能更改。 |
| Azure SQL 托管实例 | SQL实例的时区默认为UTC,且仅在实例创建时今天才能修改。 |
B. 将时区设置在数据库层面
以下示例将数据库范围的时区设置为新西兰标准时间,然后回顾受影响的功能。
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. 将数据库范围的时区重置为默认值
以下示例将数据库范围的时区恢复为 LOCAL,然后回顾受影响的函数。
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. 在会话层级设置时区
以下示例将会话时区设置为太平洋标准时间,再设置为印度标准时间,并在每次变更后审查受影响的功能。
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. 将会话时区重置为默认
以下示例将会话重置为实例或平台默认时区。
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. 系统视图总是返回实例时区
包含时间值的系统视图总是返回实例时区,无论会话或数据库时区如何。
SELECT *
FROM sys.dm_exec_sessions;
SELECT *
FROM sys.dm_exec_query_stats;
SELECT *
FROM sys.objects;