Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2016 (13.x) und höhere Versionen
von Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics SQL Analytics-Endpunkt
in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric SQL-Datenbank in Microsoft Fabric
Die AT TIME ZONE Transact-SQL (T-SQL)-Anweisung wandelt einen input_date in den entsprechenden Datum-Zeit-Offset-Wert in der Zielzeitzone um. Wenn input_date ohne Offset-Informationen angegeben wird, wendet die Funktion den Offset der Zeitzone an, vorausgesetzt , input_date befindet sich in der Zielzeitzone.
Wenn input_date als Datetimeoffset-Wert angegeben wird, wandelt AT TIME ZONE die Klausel ihn mithilfe der Zeitzonen-Umwandlungsregeln in die Zielzeitzone um.
Die AT TIME ZONE Implementierung basiert auf einem Windows-Mechanismus, um Datumszeitwerte über Zeitzonen hinweg umzuwandeln.
Transact-SQL-Syntaxkonventionen
Syntax
input_date AT TIME ZONE time_zone_value
input_date AT TIME ZONE { 'time_zone_value' | 'LOCAL' }
Arguments
input_date
Ein Ausdruck, der in einen der folgenden Werte aufgelöst werden kann: smalldatetime, datetime, datetime2 oder datetimeoffset.
'time_zone_value'
Name der Zielzeitzone. time_zone_value ist nvarchar(128).
SQL Server basiert auf in der Windows-Registrierung gespeicherten Zeitzonen. Auf dem Computer installierte Zeitzonen werden in der folgenden Registrierungsstruktur gespeichert: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
Eine Liste installierter Zeitzonen wird ebenfalls über die sys.time_zone_info Systemansicht angezeigt.
Weitere Informationen zu Zeitzonen für SQL Server unter Linux finden Sie unter Configure the time zone for SQL Server 2022 and later versions on Linux.
{ 'time_zone_value' | 'LOKAL' }
Name der Zielzeitzone.
time_zone_value ist nvarchar(128), mit einem Standard von LOCAL.
Eine Liste installierter Zeitzonen wird über die sys.time_zone_info Systemansicht angezeigt.
Wenn LOCAL angegeben ist, wird der aktuelle Standardzeitzonenwert der Sitzung auf den ursprünglichen Zeitzonenwert der Sitzung gesetzt, der entweder die Datenbank-Scoped-Option oder die Instanz-Standardoption sein kann.
Rückgabetypen
Gibt den Datentyp von datetimeoffset zurück.
Rückgabewert
Der datetimeoffset-Wert in der Zielzeitzone.
Remarks
AT TIME ZONE wendet bestimmte Regeln für die Umrechnung von Eingabewerten in die Datentypen smalldatetime, datetime und datetime2 an, die in einem Intervall liegen, das durch den Wechsel zur Sommerzeit bestimmt wird:
Wenn die Uhr vorgestellt wird, entsteht eine Lücke in der Ortszeit, die dem Zeitraum für die Uhrzeitanpassung entspricht. Dieser Zeitraum entspricht in der Regel einer Stunde, kann je nach Zeitzone aber auch 30 oder 45 Minuten entsprechen. Zeitpunkte innerhalb dieser Lücke werden nach dem Wechsel zur Sommerzeit mithilfe des Offsets konvertiert.
/* 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:00Wenn die Uhr wieder zurückgestellt wird, überschneiden sich zwei Stunden der Ortszeit um eine Stunde. In diesem Fall werden Zeitpunkte im Überlappungsintervall mit dem Offset vor der Uhrzeitumstellung dargestellt:
/* 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
Da Informationen (wie Zeitzonenregeln) außerhalb von SQL Server gespeichert und von Zeit zu Zeit geändert werden, wird die AT TIME ZONE-Funktion als nicht deterministisch klassifiziert.
Datetimeoffset wird zwar in Microsoft Fabric nicht unterstützt, AT TIME ZONE kann aber weiterhin mit datetime2 verwendet werden, wie im folgenden Beispiel gezeigt.
Examples
A. Hinzufügen des Zielzeitzonenoffsets zu datetime ohne Offsetinformationen
Verwenden Sie AT TIME ZONE zum Hinzufügen des Offsets basierend auf Zeitzonenregeln, wenn Sie wissen, dass die ursprünglichen datetime-Werte in derselben Zeitzone bereitgestellt werden:
USE AdventureWorks2025;
GO
SELECT SalesOrderID,
OrderDate,
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST
FROM Sales.SalesOrderHeader;
Hier ist das Ergebnis.
SalesOrderID OrderDate OrderDate_TimeZonePST
------------ ----------------------- -------------------------------
43659 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
43660 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
43661 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
43662 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
43663 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
43664 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
...
B. Umrechnen von Werten zwischen verschiedenen Zeitzonen
Im folgenden Beispiel werden Werte zwischen verschiedenen Zeitzonen umgerechnet. Die OrderDate Werte sind Datetime und werden nicht mit einem Offset gespeichert, sind aber bekannt als Pacific Standard Time. Der erste Schritt besteht darin, den bekannten Offset zuzuweisen und dann in die neue Zeitzone zu konvertieren:
USE AdventureWorks2025;
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;
Hier ist das Ergebnis.
SalesOrderID OrderDate OrderDate_TimeZonePST OrderDate_TimeZoneCET
------------ ----------------------- ------------------------------ -------------------------------
43659 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43660 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43661 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43662 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43663 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43664 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
...
Sie können auch eine lokale Variable ersetzen, die die Zeitzone enthält:
USE AdventureWorks2025;
GO
DECLARE @CustomerTimeZone AS 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;
Hier ist das Ergebnis.
SalesOrderID OrderDate OrderDate_TimeZonePST OrderDate_TimeZoneCustomer
------------ ----------------------- ------------------------------ -------------------------------
43659 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43660 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43661 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43662 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43663 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43664 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
...
C. Abfragen von temporalen Tabellen mit einer spezifischen Zeitzone
Das folgende Beispiel wählt Daten aus einer zeitlichen Tabelle unter WideWorldImporters Verwendung der Pazifischen Standardzeit aus.
USE WideWorldImporters;
GO
DECLARE @ASOF AS 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 CustomerID,
CustomerName,
ValidFrom AT TIME ZONE 'Pacific Standard Time'
FROM Sales.Customers FOR SYSTEM_TIME AS OF @ASOF;
Hier ist das Ergebnis.
CustomerID CustomerName ValidFrom
---------- ----------------------------------- ----------------------------------
1 Tailspin Toys (Head Office) 2013-01-01 00:00:00.0000000 -08:00
2 Tailspin Toys (Sylvanite, MT) 2013-01-01 00:00:00.0000000 -08:00
3 Tailspin Toys (Peeples Valley, AZ) 2013-01-01 00:00:00.0000000 -08:00
4 Tailspin Toys (Medicine Lodge, KS) 2013-01-01 00:00:00.0000000 -08:00
5 Tailspin Toys (Gasport, NY) 2013-01-01 00:00:00.0000000 -08:00
6 Tailspin Toys (Jessie, ND) 2013-01-01 00:00:00.0000000 -08:00