Dela via


SWITCHOFFSET (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Returnerar ett datetimeoffset-värde som ändras från den lagrade tidszonsförskjutningen till en angiven ny tidszonsförskjutning.

En översikt över alla Transact-SQL datatyper och funktioner för datum och tid finns i Datatyper och funktioner för datum och tid.

Transact-SQL syntaxkonventioner

Syntax

SWITCHOFFSET ( datetimeoffset_expression , timezoneoffset_expression )

Arguments

datetimeoffset_expression

Ett uttryck som kan matchas till ett datetimeoffset(n) -värde.

timezoneoffset_expression

Ett uttryck i formatet [+|-]TZH:TZM eller ett signerat heltal (minuter) som representerar tidszonsförskjutningen och antas vara dagsljusbesparande medveten och justerad.

Returtyper

datetimeoffset med bråkprecisionen för argumentet datetimeoffset_expression .

Anmärkningar

Använd SWITCHOFFSET för att välja ett datetimeoffset-värde i en tidszonsförskjutning som skiljer sig från den tidszonsförskjutning som ursprungligen lagrades. SWITCHOFFSET uppdaterar inte det lagrade time_zone-värdet .

SWITCHOFFSET kan användas för att uppdatera en datetimeoffset-kolumn .

Om du använder SWITCHOFFSET med funktionen GETDATE() kan frågan köras långsamt. Det beror på att frågeoptimeraren inte kan hämta korrekta kardinalitetsuppskattningar för datetime-värdet. Lös problemet genom att använda frågetipset OPTION (RECOMPILE) för att tvinga frågeoptimeraren att kompilera om en frågeplan nästa gång samma fråga körs. Optimeraren har sedan korrekta kardinalitetsuppskattningar och skapar en effektivare frågeplan. Mer information om frågetipset finns i RECOMPILEFrågetips.

DECLARE @dt AS DATETIMEOFFSET = switchoffset(CONVERT (DATETIMEOFFSET, GETDATE()), '-04:00');

SELECT *
FROM t
WHERE c1 > @dt
OPTION (RECOMPILE);

Examples

I följande exempel används SWITCHOFFSET för att visa en annan tidszonsförskjutning än värdet som lagras i databasen.

CREATE TABLE dbo.test (ColDatetimeoffset DATETIMEOFFSET);
GO

INSERT INTO dbo.test VALUES ('1998-09-20 7:45:50.71345 -5:00');
GO

SELECT SWITCHOFFSET (ColDatetimeoffset, '-08:00')
FROM dbo.test;
GO
--Returns: 1998-09-20 04:45:50.7134500 -08:00

SELECT ColDatetimeoffset
FROM dbo.test;
--Returns: 1998-09-20 07:45:50.7134500 -05:00