Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: Az SQL Server 2016 (13.x) és újabb verziói
Az Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL Analytics végpontja a Microsoft Fabric
Warehouse-ban a Microsoft Fabric
SQL Database-ben a Microsoft Fabricben
A bemenetidátumot a cél időzóna megfelelő datetimeoffset értékére konvertálja. Ha az inputdátum eltolási információ nélkül van megadva, a függvény az időzóna eltolását alkalmazza, feltéve, hogy az inputdátum a cél időzónában van. Ha az inputdátumdatetimeoffset értékként van megadva, akkor AT TIME ZONE a záradék az időzóna-konverziós szabályok használatával átalakítja azt a cél időzónává.
AT TIME ZONE az implementáció egy Windows-mechanizmusra támaszkodik a datetime értékek időzónák közötti konvertálásához.
Transact-SQL szintaxis konvenciók
Syntax
inputdate AT TIME ZONE timezone
Arguments
inputdate
Kisdátum, datetime, datetime2 vagy datetimeoffset értékre feloldható kifejezés.
timezone
A cél időzóna neve. Az SQL Server a Windows beállításjegyzékben tárolt időzónákra támaszkodik. A számítógépre telepített időzónák a következő beállításjegyzék-hive-ben vannak tárolva: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones. A telepített időzónák listája is megjelenik a sys.time_zone_info nézetben.
A Linuxon futó SQL Server időzónáiról további információt az SQL Server 2022 és újabb linuxos verzióinak időzónáinak konfigurálása című témakörben talál.
Visszatérési típusok
A datetimeoffset adattípusát adja vissza.
Visszaadott érték
A cél időzóna datetimeoffset értéke.
Remarks
AT TIME ZONE speciális szabályokat alkalmaz a bemeneti értékeknek a DST-változás által érintett intervallumba eső smalldatetime, datetime és datetime2 adattípusokban történő konvertálására:
Ha az óra előre van állítva, akkor a helyi idő egyenlő az órabeállítás időtartamával. Ez az időtartam általában 1 óra, de időzónától függően 30 vagy 45 perc is lehet. Az ebben a résben lévő pontok a DST-módosítás utáni eltolással lesznek konvertálva.
/* 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:00Ha az óra vissza van állítva, akkor 2 óra helyi idő átfedésben van egy órára. Ebben az esetben az átfedésben lévő intervallumhoz tartozó időpontok az óraváltás előtt eltolással jelennek meg:
/* 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
Mivel egyes információk (például az időzónák szabályai) az SQL Serveren kívül vannak fenntartva, és időnként módosulnak, a AT TIME ZONE függvény nemdeterminista besorolású.
Bár a datetimeoffset nem támogatott a Microsoft Fabric adattárházaiban, AT TIME ZONE a datetime2-vel továbbra is használható, ahogy az alábbi példában is látható.
Examples
A. Cél időzóna eltolásának hozzáadása dátumidőhöz eltolás adatai nélkül
Időzóna-szabályok alapján eltolás hozzáadására használható AT TIME ZONE , ha tudja, hogy az eredeti dátum/idő értékek ugyanabban az időzónában vannak megadva:
USE AdventureWorks2022;
GO
SELECT SalesOrderID, OrderDate,
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST
FROM Sales.SalesOrderHeader;
B. Értékek konvertálása különböző időzónák között
Az alábbi példa különböző időzónák közötti értékeket konvertál. Az OrderDate értékek dátumidők , és nem eltolással vannak tárolva, de ismerten csendes-óceáni téli időnek számítanak. Az első lépés az ismert eltolás hozzárendelése, majd az új időzónába való konvertálás:
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;
Az időzónát tartalmazó helyi változót is helyettesítheti:
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. Időbeli táblák lekérdezése adott időzónával
Az alábbi példa egy temporális tábla adatait választja ki a Pacific Standard Time használatával.
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;