Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2016 (13.x) a novější verze
koncového bodu Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
v Microsoft Fabric
Warehouse v databázi Microsoft Fabric
SQL v Microsoft Fabric
Převede vstupní datum na odpovídající hodnotu datetimeoffset v cílovém časovém pásmu. Při zadání vstupního data bez informací o posunu použije funkce posun časového pásma za předpokladu, že vstupní datum je v cílovém časovém pásmu. Pokud je vstupní datum zadané jako hodnota datetimeoffset , AT TIME ZONE klauzule ji převede do cílového časového pásma pomocí pravidel převodu časového pásma.
AT TIME ZONE implementace spoléhá na mechanismus Systému Windows k převodu hodnot data a času napříč časovými pásmy.
Syntax
inputdate AT TIME ZONE timezone
Arguments
inputdate
Výraz, který lze přeložit na hodnotu smalldatetime, datetime, datetime2 nebo datetimeoffset.
timezone
Název cílového časového pásma SQL Server spoléhá na časová pásma uložená v registru Systému Windows. Časová pásma nainstalovaná v počítači jsou uložena v následujícím podregistru registru: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones. Seznam nainstalovaných časových pásem je také zpřístupněn prostřednictvím zobrazení sys.time_zone_info .
Další informace o časových pásmech pro SQL Server v Linuxu najdete v tématu Konfigurace časového pásma pro SQL Server 2022 a novější verze v Linuxu.
Návratové typy
Vrátí datový typ datetimeoffset.
Návratová hodnota
Hodnota datetimeoffset v cílovém časovém pásmu.
Remarks
AT TIME ZONEpoužije specifická pravidla pro převod vstupních hodnot v datových typech smalldatetime, datetime a datetime2, které spadají do intervalu ovlivněného změnou DST:
Když jsou hodiny nastavené dopředu, je v místním čase mezera rovna době trvání úpravy hodin. Tato doba trvání je obvykle 1 hodina, ale v závislosti na časovém pásmu může být 30 nebo 45 minut. Body v čase, které jsou v této mezerě, se po změně DST převedou s posunem.
/* Moving to DST in "Central European Standard Time" zone: offset changes from +01:00 -> +02:00 Change occurred on March 27th, 2022 at 02:00:00. Adjusted local time became 2022-03-27 03:00:00. */ --Time before DST change has standard time offset (+01:00) SELECT CONVERT(DATETIME2(0), '2022-03-27T01:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 01:01:00 +01:00 /* Adjusted time from the "gap interval" (between 02:00 and 03:00) is moved 1 hour ahead and presented with the summer time offset (after the DST change) */ SELECT CONVERT(DATETIME2(0), '2022-03-27T02:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 03:01:00 +02:00 --Time after 03:00 is presented with the summer time offset (+02:00) SELECT CONVERT(DATETIME2(0), '2022-03-27T03:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 03:01:00 +02:00Když se hodiny nastaví zpět, překryjí se 2 hodiny místního času na jednu hodinu. V takovém případě se body v čase, které patří do překrývajícího se intervalu, zobrazí posun před změnou hodin:
/* Moving back from DST to standard time in "Central European Standard Time" zone: offset changes from +02:00 -> +01:00. Change occurred on October 30th, 2022 at 03:00:00. Adjusted local time became 2022-10-30 02:00:00 */ --Time before the change has DST offset (+02:00) SELECT CONVERT(DATETIME2(0), '2022-10-30T01:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 01:01:00 +02:00 /* Time from the "overlapped interval" is presented with DST offset (before the change) */ SELECT CONVERT(DATETIME2(0), '2022-10-30T02:00:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 02:00:00 +02:00 --Time after 03:00 is regularly presented with the standard time offset (+01:00) SELECT CONVERT(DATETIME2(0), '2022-10-30T03:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 03:01:00 +01:00
Vzhledem k tomu, že některé informace (například pravidla časového pásma) se uchovávají mimo SQL Server a můžou se občas měnit, AT TIME ZONE je funkce klasifikovaná jako nedeterministická.
I když datatimeoffset není v datových skladech v Microsoft Fabric podporováno, AT TIME ZONE můžete ho dál používat s datetime2, jak je znázorněno v následujícím příkladu.
Examples
A. Přidání posunu cílového časového pásma k datetime bez informací o posunu
Umožňuje AT TIME ZONE přidat posun na základě pravidel časového pásma, když víte, že původní hodnoty data a času jsou k dispozici ve stejném časovém pásmu:
USE AdventureWorks2022;
GO
SELECT SalesOrderID, OrderDate,
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST
FROM Sales.SalesOrderHeader;
B. Převod hodnot mezi různými časovými pásmy
Následující příklad převede hodnoty mezi různými časovými pásmy. Hodnoty OrderDate jsou datetime a neukládají se s posunem, ale jsou známé jako Tichomoří (běžný čas). Prvním krokem je přiřazení známého posunu a následné převedení na nové časové pásmo:
USE AdventureWorks2022;
GO
SELECT SalesOrderID, OrderDate,
--Assign the known offset only
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST,
--Assign the known offset, then convert to another time zone
OrderDate AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE 'Central European Standard Time' AS OrderDate_TimeZoneCET
FROM Sales.SalesOrderHeader;
Můžete také nahradit místní proměnnou obsahující časové pásmo:
USE AdventureWorks2022;
GO
DECLARE @CustomerTimeZone nvarchar(128) = 'Central European Standard Time';
SELECT SalesOrderID, OrderDate,
--Assign the known offset only
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST,
--Assign the known offset, then convert to another time zone
OrderDate AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE @CustomerTimeZone AS OrderDate_TimeZoneCustomer
FROM Sales.SalesOrderHeader;
C. Dotazování dočasných tabulek pomocí určitého časového pásma
Následující příklad vybere data z dočasné tabulky pomocí pacifického standardního času.
USE AdventureWorks2022;
GO
DECLARE @ASOF DATETIMEOFFSET;
SET @ASOF = DATEADD(MONTH, -1, GETDATE()) AT TIME ZONE 'UTC';
-- Query state of the table a month ago projecting period
-- columns as Pacific Standard Time
SELECT BusinessEntityID,
PersonType,
NameStyle,
Title,
FirstName,
MiddleName,
ValidFrom AT TIME ZONE 'Pacific Standard Time'
FROM Person.Person_Temporal
FOR SYSTEM_TIME AS OF @ASOF;