SET ZONA WAKTU (Transact-SQL)

Berlaku untuk:Database Azure SQLDatabase SQL di Microsoft Fabric

SET TIME ZONE Pernyataan Transact-SQL (T-SQL) digunakan untuk mengatur nilai zona waktu di database Azure SQL Database dan SQL di Microsoft Fabric.

Note

SET TIME ZONEtidak didukung di SQL Server atau Azure SQL Managed Instance.

SET TIME ZONE menimpa nilai zona waktu tingkat database atau instance. Nilai zona waktu sama dengan name kolom pada tampilan sistem sys.time_zone_info .

Konvensi sintaks Transact-SQL

Syntax

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

Argumen

{ 'time_zone_value' | LOKAL }

Menentukan nilai zona waktu. time_zone_value adalah nvarchar(128), dengan default .LOCAL

Jika LOCAL ditentukan, maka nilai zona waktu default saat ini dari sesi diatur ke nilai zona waktu asli sesi, yang dapat berupa opsi cakupan database atau default instance.

Daftar zona waktu yang terpasang ditampilkan melalui tampilan sistem sys.time_zone_info .

Komentar

Jika SET TIME ZONE digunakan dalam modul T-SQL atau batch SQL dinamis, maka perubahan hanya berlaku untuk cakupan eksekusi modul atau batch SQL dinamis. Setelah eksekusi batch modul atau SQL dinamis selesai, pengaturan zona waktu sesi akan kembali ke nilai zona waktu yang berlaku sebelum eksekusi modul atau batch SQL dinamis.

Permissions

Memerlukan keanggotaan dalam peran database tetap publik .

Examples

Contoh kode dalam artikel ini menggunakan AdventureWorks2025database , AdventureWorksDW2025, atau AdventureWorksLT2025 contoh, yang dapat Anda unduh dari repositori GitHub Azure Data SQL Samples Repository.

A. Lihat pengaturan zona waktu saat ini

Kueri berikut mengembalikan nama server, nama basis data, dan versi produk.

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

Kueri berikut mencantumkan zona waktu yang valid, diurutkan berdasarkan offset UTC mereka.

SELECT *
FROM sys.time_zone_info
ORDER BY current_utc_offset;

Kueri berikut memeriksa nilai saat ini dari TIME_ZONE konfigurasi yang dibatasi cakupan database.

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

Jika zona waktu tidak diatur di tingkat database, maka secara default akan menjadi zona waktu instance. Pengaturan zona waktu instance tergantung pada platform:

Platform Description
Windows Zona waktu OS yang mendasarinya.
Linux Zona waktu proses SQL Server, yang dapat Anda atur menggunakan TZ variabel lingkungan.
Azure SQL Database Zona waktu instance SQL, yang selalu UTC dan tidak bisa diubah hari ini.
Azure SQL Managed Instance Zona waktu instance SQL, yang secara default adalah UTC dan hanya dapat diubah saat pembuatan instance hari ini.

B. Atur zona waktu di tingkat basis data

Contoh berikut mengatur zona waktu yang dibatasi database ke Waktu Standar Selandia Baru, lalu meninjau fungsi yang terpengaruh.

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. Mengatur ulang zona waktu yang dibatasi database ke default

Contoh berikut mengatur zona waktu yang dibatasi database kembali ke LOCAL, lalu meninjau fungsi yang terpengaruh.

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. Atur zona waktu di tingkat sesi

Contoh berikut mengatur zona waktu sesi ke Waktu Standar Pasifik lalu ke Waktu Standar India, dengan meninjau fungsi yang terdampak setelah setiap perubahan.

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. Reset zona waktu sesi ke default

Contoh berikut mengatur ulang sesi ke zona waktu default instance atau platform.

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. Tampilan sistem selalu mengembalikan zona waktu instance

System view yang mencakup nilai waktu selalu mengembalikan zona waktu instance, terlepas dari sesi atau zona waktu database.

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;