sql >> Databasteknik >  >> RDS >> Sqlserver

Hämta den aktuella tidszonen för servern i SQL Server (T-SQL)

Microsoft introducerade CURRENT_TIMEZONE() funktion i SQL Server 2019 för att returnera serverns tidszon.

Mer specifikt, den här funktionen "returnerar namnet på den tidszon som observerats av en server eller en instans".

Exempel

Här är ett exempel att visa.

SELECT CURRENT_TIMEZONE();

Resultat:

(UTC) Coordinated Universal Time

I det här fallet är tidszonen för min instans av SQL Server UTC.

Jag kan se detta när jag kör funktioner som SYSDATETIMEOFFSET() .

SELECT SYSDATETIMEOFFSET();

Resultat:

2020-04-01 00:14:44.0470785 +00:00

UTC har en tidszonförskjutning på +00:00 (ingen förskjutning), och detta återspeglas när jag returnerar systemets datum och tid.

Tidigare versioner av SQL Server

Om jag kör CURRENT_TIMEZONE() mot min SQL Server 2017-instans, det här är vad jag får.

SELECT CURRENT_TIMEZONE();

Resultat:

Msg 195, Level 15, State 10, Line 1
'CURRENT_TIMEZONE' is not a recognized built-in function name.

Jag laddade till och med ner den senaste Docker-behållaren med SQL Server 2017 för Linux för att kontrollera detta, men jag får fortfarande det här felet.

Jag har också kontrollerat andra SQL Server 2017-installationer men med samma resultat.

I kommentarsavsnittet i sin onlinedokumentation för den här funktionen har Microsoft insinuerat att CURRENT_TIMEZONE() kommer att porteras till tidigare versioner av SQL Server, men detta verkar inte ha hänt när detta skrivs.

Under tiden kan du prova följande kod.

DECLARE @TimeZone VARCHAR(50)
EXEC MASTER.dbo.xp_regread 'HKEY_LOCAL_MACHINE',
'SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
'TimeZoneKeyName',@TimeZone OUT
SELECT @TimeZone

Resultat:

UTC

Jag körde det på samma instans av SQL Server 2017 som inte stöder CURRENT_TIMEZONE() , och det fungerade bra.

Uppenbarligen kommer ditt resultat att bero på var din server är placerad (eller åtminstone vilken tidszon den har konfigurerats för). Det här är vad jag får om jag kör det här uttalandet på en annan server:

W. Europe Standard Time

SQL Server har också en systemvy som gör att du kan returnera en lista över tidszoner som stöds, som du kan använda för att krysskontrollera dina resultat här.


  1. Vad betyder följande Oracle-fel:ogiltigt kolumnindex

  2. Ruby on Rails:Finns det något sätt att hämta föremål från databasen och få dem returnerade i en angiven ordning?

  3. Infoga om det inte finns Oracle

  4. MySQL Hosting på Azure, fullständigt hanterad molndatabastjänst lanseras på ScaleGrid