sql >> Database teknologi >  >> RDS >> Sqlserver

Få den aktuelle tidszone for serveren i SQL Server (T-SQL)

Microsoft introducerede CURRENT_TIMEZONE() funktion i SQL Server 2019 for at returnere serverens tidszone.

Mere specifikt, denne funktion "returnerer navnet på den tidszone, der er observeret af en server eller en instans".

Eksempel

Her er et eksempel til at demonstrere.

SELECT CURRENT_TIMEZONE();

Resultat:

(UTC) Coordinated Universal Time

I dette tilfælde er tidszonen for min forekomst af SQL Server UTC.

Jeg kan se dette, når jeg kører funktioner som SYSDATETIMEOFFSET() .

SELECT SYSDATETIMEOFFSET();

Resultat:

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

UTC har en tidszoneforskydning på +00:00 (ingen forskydning), og dette afspejles, når jeg returnerer systemets dato og klokkeslæt.

Tidligere versioner af SQL Server

Hvis jeg kører CURRENT_TIMEZONE() mod min SQL Server 2017-instans, her er hvad jeg får.

SELECT CURRENT_TIMEZONE();

Resultat:

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

Jeg downloadede endda den seneste Docker-container med SQL Server 2017 til Linux for at tjekke dette, men jeg får stadig denne fejl.

Jeg har også tjekket andre SQL Server 2017-installationer, men med samme resultat.

I kommentarfeltet i sin onlinedokumentation for denne funktion har Microsoft insinueret, at CURRENT_TIMEZONE() vil blive porteret til tidligere versioner af SQL Server, men dette ser ikke ud til at være sket, da dette skrives.

I mellemtiden kan du prøve følgende kode.

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

Resultat:

UTC

Jeg kørte det på den samme forekomst af SQL Server 2017, som ikke understøtter CURRENT_TIMEZONE() , og det fungerede fint.

Naturligvis vil dit resultat afhænge af, hvor din server er placeret (eller i det mindste, hvilken tidszone den er blevet konfigureret til). Her er hvad jeg får, hvis jeg kører denne erklæring på en anden server:

W. Europe Standard Time

SQL Server har også en systemvisning, der giver dig mulighed for at returnere en liste over understøttede tidszoner, som du kan bruge til at krydstjekke dine resultater her.


  1. Standalone MySQL-server

  2. Sådan opretter du en løbende periode i alt

  3. ALTER &DROP Tabel DDL med Execute Immediate i Oracle Database

  4. Returnummer fra Oracle Select-sætning efter parsingsdato