SET ČASOVÉ PÁSMO (Transact-SQL)

Platí na:Azure SQL DatabaseSQL databáze v Microsoft Fabric

Příkaz SET TIME ZONE Transact-SQL (T-SQL) se používá k nastavení hodnoty časového pásma v Azure SQL Database a SQL databáze v Microsoft Fabric.

Note

SET TIME ZONEnení podporován v SQL Server ani Azure SQL Managed Instance.

SET TIME ZONE přepisuje hodnotu časového pásma na úrovni databáze nebo instance. Hodnota časového pásma je stejná jako sloupec name v pohledu sys.time_zone_info systému.

Transact-SQL konvence syntaxe

Syntaxe

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

Argumenty

{ 'time_zone_value' | 'MÍSTNÍ' }

Specifikuje hodnotu časového pásma. time_zone_value je nvarchar(128), s výchozím hodnotou LOCAL.

Pokud LOCAL je specifikováno, pak je aktuální výchozí hodnota časového pásma relace nastavena na původní hodnotu časového pásma relace, což může být buď databázově omezená volba, nebo výchozí instance instance.

Seznam nainstalovaných časových pásem je zobrazen prostřednictvím sys.time_zone_info systémového pohledu.

Remarks

Pokud SET TIME ZONE je použit v modulu T-SQL nebo dynamickém SQL batchu, změna se vztahuje pouze na rozsah provádění modulu nebo dynamického SQL batche. Po dokončení modulu nebo dynamického SQL dávkového spuštění se nastavení časového pásma relace vrátí na hodnotu časového pásma platnou před spuštěním modulu nebo dynamické SQL dávky.

Povolení

Vyžaduje členství ve veřejné pevné databázové roli.

Examples

Ukázky kódu v tomto článku používají ukázkovou databázi nebo AdventureWorksDW2025, kterou si můžete stáhnout z repozitáře GitHubu AdventureWorks2025.

A. Zobrazit aktuální nastavení časových pásem

Následující dotaz vrací název serveru, název databáze a verzi produktu.

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

Následující dotaz uvádí platné časové pásma, seřazené podle jejich UTC offsetu.

SELECT *
FROM sys.time_zone_info
ORDER BY current_utc_offset;

Následující dotaz kontroluje aktuální hodnotu TIME_ZONE konfigurace zaměřené na databázi.

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

Pokud časové pásmo není nastaveno na úrovni databáze, výchozí je časové pásmo instance. Nastavení časového pásma instance závisí na platformě:

Platforma Description
Windows Časové pásmo základního OS.
Operační systém Linux Časové pásmo procesu SQL Server, které můžete nastavit pomocí TZ proměnné prostředí.
Azure SQL Database Časové pásmo SQL instance, které je vždy UTC a dnes ho nelze změnit.
Azure SQL Managed Instance Časové pásmo SQL instance, které je ve výchozím nastavení UTC a lze jej upravit při vytvoření instance až dnes.

B. Nastavte časové pásmo na úrovni databáze

Následující příklad nastavuje časové pásmo zaměřené na Nový Zéland Standard Time a poté přezkoumává dotčené funkce.

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. Resetovat časové pásmo zaměřené na databázi na výchozí

Následující příklad nastaví časové pásmo zaměřené na databázi zpět na LOCAL, poté přezkoumá dotčené funkce.

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. Nastavte časové pásmo na úrovni sezení

Následující příklad nastavuje časové pásmo relace na pacifický standardní čas a poté na indický standardní čas, přičemž po každé změně se přezkoumávají dotčené funkce.

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. Resetovat časové pásmo relace na výchozí

Následující příklad resetuje relaci do výchozího časového pásma instance nebo platformy.

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. Systémové pohledy vždy vracejí časové pásmo instance

Systémové pohledy, které zahrnují časové hodnoty, vždy vracejí časové pásmo instance, bez ohledu na časové pásmo relace nebo databáze.

SELECT *
FROM sys.dm_exec_sessions;

SELECT *
FROM sys.dm_exec_query_stats;

SELECT *
FROM sys.objects;