Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2016 (13.x) en latere versies
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics SQL Analytics-eindpunt
in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL Database in Microsoft Fabric SQL Database in Microsoft Fabric
De AT TIME ZONE Transact-SQL (T-SQL)-instructie zet een input_date om naar de overeenkomstige datetimeoffset-waarde in de doeltijdzone. Wanneer input_date wordt gegeven zonder offset-informatie, past de functie de offset van de tijdzone toe, ervan uitgaande dat input_date zich in de doeltijdzone bevindt.
Als input_date als datetimeoffset wordt gegeven, dan AT TIME ZONE zet de clausule deze om in de doeltijdzone met behulp van de tijdzoneconversieregels.
De AT TIME ZONE implementatie maakt gebruik van een Windows-mechanisme om datumtijdwaarden over tijdzones om te zetten.
Transact-SQL syntaxis-conventies
Syntax
input_date AT TIME ZONE time_zone_value
input_date AT TIME ZONE { 'time_zone_value' | 'LOCAL' }
Arguments
input_date
Een expressie die kan worden omgezet in een waarde voor smalldatetime, datetime, datetime2 of datetimeoffset.
'time_zone_value'
Naam van de doeltijdzone. time_zone_value is nvarchar(128).
SQL Server is afhankelijk van tijdzones die zijn opgeslagen in het Windows-register. Tijdzones die op de computer zijn geïnstalleerd, worden opgeslagen in de volgende register hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones.
Een lijst van geïnstalleerde tijdzones wordt ook getoond via de sys.time_zone_info systeemweergave.
Zie De tijdzone configureren voor SQL Server 2022 en latere versies op Linux voor meer informatie over tijdzones voor SQL Server op Linux.
{ 'time_zone_value' | 'LOKAAL' }
Naam van de doeltijdzone.
time_zone_value is nvarchar(128), met een standaard van LOCAL.
Een lijst van geïnstalleerde tijdzones wordt getoond via de sys.time_zone_info systeemweergave.
Als LOCAL is gespecificeerd, dan wordt de huidige standaard tijdzonewaarde van de sessie ingesteld op de oorspronkelijke tijdzonewaarde van de sessie, wat zowel databasescoped optie als de standaard instantie kan zijn.
Retourtypen
Retourneert het gegevenstype datetimeoffset.
Retourwaarde
De datum/tijdoffset-waarde in de doeltijdzone.
Remarks
AT TIME ZONEpast specifieke regels toe voor het converteren van invoerwaarden in gegevenstypen smalldatetime, datetime en datetime2 die vallen onder een interval dat wordt beïnvloed door een DST-wijziging:
Wanneer de klok vooruit is, is er een tussenruimte in de lokale tijd die gelijk is aan de duur van de klokaanpassing. Deze duur is meestal 1 uur, maar kan 30 of 45 minuten zijn, afhankelijk van de tijdzone. Punten in de tijd die zich in deze kloof bevinden, worden geconverteerd met de offset na DST-wijziging.
/* 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:00Wanneer de klok is teruggezet, worden 2 uur lokale tijd overlapt op één uur. In dat geval worden punten in de tijd die deel uitmaken van het overlappende interval weergegeven met de offset voordat de klok verandert:
/* 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
Omdat bepaalde informatie (zoals tijdzoneregels) buiten SQL Server wordt onderhouden en af en toe kan worden gewijzigd, wordt de AT TIME ZONE functie als niet-deterministisch beschouwd.
Datetimeoffset wordt niet ondersteund in datawarehousing in Microsoft Fabric, AT TIME ZONE maar kan nog steeds worden gebruikt met datetime2, zoals in het volgende voorbeeld.
Examples
A. Doeltijdzone-offset toevoegen aan datum/tijd zonder offsetgegevens
Gebruik AT TIME ZONE dit om offset toe te voegen op basis van tijdzoneregels wanneer u weet dat de oorspronkelijke datum/tijd-waarden in dezelfde tijdzone worden opgegeven:
USE AdventureWorks2025;
GO
SELECT SalesOrderID,
OrderDate,
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST
FROM Sales.SalesOrderHeader;
Hier is het resultatenoverzicht.
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. Waarden tussen verschillende tijdzones converteren
In het volgende voorbeeld worden waarden tussen verschillende tijdzones geconverteerd. De OrderDate waarden zijn datum/tijd en worden niet opgeslagen met een offset, maar zijn bekend als Pacific Standard Time. De eerste stap is het toewijzen van de bekende offset en vervolgens converteren naar de nieuwe tijdzone:
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 is het resultatenoverzicht.
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
...
U kunt ook vervangen door een lokale variabele die de tijdzone bevat:
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 is het resultatenoverzicht.
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. Tijdelijke tabellen opvragen met behulp van een specifieke tijdzone
Het volgende voorbeeld selecteert gegevens uit een temporele tabel met WideWorldImporters behulp van Pacific Standard Time.
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 is het resultatenoverzicht.
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