SET 時區(Transact-SQL)

適用於:Azure SQL DatabaseMicrosoft Fabric 中的 SQL 資料庫

SET TIME ZONE Transact-SQL(T-SQL)陳述式用於設定 Azure SQL Database 的時區值及 Microsoft Fabric 的 SQL 資料庫。

Note

SET TIME ZONESQL Server 或 Azure SQL 受控執行個體 不支援此功能。

SET TIME ZONE 覆蓋資料庫或實例層級的時區值。 時區值與namesys.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 批次執行前生效的時區值。

許可

需要成為 公開 固定資料庫角色的成員。

Examples

本文的程式碼範例使用AdventureWorks2025了 、 AdventureWorksDW2025或AdventureWorksLT2025範例資料庫,你可以從 Azure Data SQL 範例庫 GitHub 下載。

答: 查看目前的時區設定

以下查詢會回傳伺服器名稱、資料庫名稱及產品版本。

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 Database 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;