Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL Analytics-slutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
SQL Database i Förhandsversion av Microsoft Fabric
Konverterar ett indatadatum till motsvarande datetimeoffset-värde i måltidszonen. När inputdate tillhandahålls utan förskjutningsinformation tillämpar funktionen förskjutningen av tidszonen förutsatt att indata är i måltidszonen. Om inputdate anges som ett datetimeoffset-värdeAT TIME ZONE konverterar satsen det till måltidszonen med hjälp av tidszonskonverteringsreglerna.
AT TIME ZONE implementering bygger på en Windows-mekanism för att konvertera datetime-värden mellan tidszoner.
Transact-SQL syntaxkonventioner
Syntax
inputdate AT TIME ZONE timezone
Arguments
inputdate
Ett uttryck som kan matchas till ett smalldatetime-, datetime-, datetime2- eller datetimeoffset-värde .
timezone
Namnet på måltidszonen. SQL Server förlitar sig på tidszoner som lagras i Windows-registret. Tidszoner som är installerade på datorn lagras i följande registerdatafil: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones. En lista över installerade tidszoner exponeras också via vyn sys.time_zone_info .
Mer information om tidszoner för SQL Server i Linux finns i Konfigurera tidszonen för SQL Server 2022 och senare versioner på Linux.
Return types
Returnerar datatypen datetimeoffset.
Return value
Datetimeoffset-värdet i måltidszonen.
Remarks
AT TIME ZONE tillämpar specifika regler för att konvertera indatavärden i datatyperna smalldatetime, datetime och datetime2 som infaller i ett intervall som påverkas av en DST-ändring:
När klockan har ställts in framåt finns det en lucka i lokal tid som motsvarar klockjusteringens varaktighet. Den här varaktigheten är vanligtvis 1 timme, men det kan ta 30 eller 45 minuter, beroende på tidszon. Tidpunkter som finns i det här gapet konverteras med förskjutningen efter DST-ändringen.
/* 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:00När klockan ställs in igen överlappas 2 timmars lokal tid till en timme. I så fall visas de tidpunkter som hör till det överlappande intervallet med förskjutningen innan klockan ändras:
/* 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
Eftersom viss information (till exempel tidszonsregler) underhålls utanför SQL Server och kan komma att ändras tillfälligt, AT TIME ZONE klassificeras funktionen som icke-terministisk.
Datetimeoffset stöds inte i datalager i Microsoft Fabric, AT TIME ZONE men kan fortfarande användas med datetime2, som i följande exempel.
Examples
A. Lägg till måltidsförskjutning till datetime utan förskjutningsinformation
Använd AT TIME ZONE för att lägga till förskjutning baserat på tidszonsregler när du vet att de ursprungliga datetime-värdena anges i samma tidszon:
USE AdventureWorks2022;
GO
SELECT SalesOrderID, OrderDate,
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST
FROM Sales.SalesOrderHeader;
B. Konvertera värden mellan olika tidszoner
I följande exempel konverteras värden mellan olika tidszoner. Värdena OrderDate är datetime och lagras inte med en förskjutning, men är kända för att vara Pacific Standard Time. Det första steget är att tilldela den kända förskjutningen och sedan konvertera till den nya tidszonen:
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;
Du kan också ersätta i en lokal variabel som innehåller tidszonen:
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. Fråga temporala tabeller med hjälp av en specifik tidszon
I följande exempel väljs data från en temporal tabell med Pacific Standard Time.
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;