適用於:Azure SQL Database
Microsoft 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系統檢視中的欄位相同。
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;