sql >> Database >  >> RDS >> Sqlserver

Verkrijg de huidige tijdzone van de server in SQL Server (T-SQL)

Microsoft introduceerde de CURRENT_TIMEZONE() functie in SQL Server 2019 voor het retourneren van de tijdzone van de server.

Meer specifiek, deze functie "retourneert de naam van de tijdzone die wordt waargenomen door een server of een instantie".

Voorbeeld

Hier is een voorbeeld om te demonstreren.

SELECT CURRENT_TIMEZONE();

Resultaat:

(UTC) Coordinated Universal Time

In dit geval is de tijdzone van mijn exemplaar van SQL Server UTC.

Ik kan dit zien wanneer ik functies als SYSDATETIMEOFFSET() . uitvoer .

SELECT SYSDATETIMEOFFSET();

Resultaat:

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

UTC heeft een tijdzone-offset van +00:00 (geen offset), en dit wordt weergegeven wanneer ik de datum en tijd van het systeem terugstuur.

Eerdere versies van SQL Server

Als ik CURRENT_TIMEZONE() . uitvoer tegen mijn SQL Server 2017-instantie, dit is wat ik krijg.

SELECT CURRENT_TIMEZONE();

Resultaat:

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

Ik heb zelfs de nieuwste Docker-container gedownload met SQL Server 2017 voor Linux om dit te controleren, maar ik krijg nog steeds deze foutmelding.

Ik heb ook andere installaties van SQL Server 2017 gecontroleerd, maar met hetzelfde resultaat.

In het commentaargedeelte van de online documentatie voor deze functie heeft Microsoft geïnsinueerd dat CURRENT_TIMEZONE() wordt overgezet naar eerdere versies van SQL Server, maar dit lijkt op het moment van schrijven nog niet te zijn gebeurd.

In de tussentijd kun je de volgende code proberen.

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

Resultaat:

UTC

Ik heb dat uitgevoerd op hetzelfde exemplaar van SQL Server 2017 dat CURRENT_TIMEZONE() niet ondersteunt , en het werkte prima.

Het is duidelijk dat uw resultaat afhankelijk is van waar uw server zich bevindt (of in ieder geval voor welke tijdzone deze is geconfigureerd). Dit is wat ik krijg als ik deze verklaring op een andere server uitvoer:

W. Europe Standard Time

SQL Server heeft ook een systeemweergave waarmee u een lijst met ondersteunde tijdzones kunt retourneren, die u kunt gebruiken om uw resultaten hier te controleren.


  1. Hoe installeer ik Haproxy en Keepalive

  2. Onze meest populaire databaseblogposts in 2017

  3. Wat zijn praktische verschillen tussen `REPLACE` en `INSERT ... ON DUPLICATE KEY UPDATE` in MySQL?

  4. 2 manieren om een ​​substring in MariaDB te vervangen