Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Abrufen der aktuellen Zeitzone des Servers in SQL Server (T-SQL)

Microsoft hat die CURRENT_TIMEZONE() eingeführt Funktion in SQL Server 2019 zur Rückgabe der Zeitzone des Servers.

Genauer gesagt gibt diese Funktion „den Namen der Zeitzone zurück, die von einem Server oder einer Instanz beobachtet wird“.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

SELECT CURRENT_TIMEZONE();

Ergebnis:

(UTC) Coordinated Universal Time

In diesem Fall ist die Zeitzone meiner Instanz von SQL Server UTC.

Ich kann dies sehen, wenn ich Funktionen wie SYSDATETIMEOFFSET() ausführe .

SELECT SYSDATETIMEOFFSET();

Ergebnis:

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

UTC hat einen Zeitzonen-Offset von +00:00 (kein Offset), und dieser spiegelt sich wider, wenn ich das Datum und die Uhrzeit des Systems zurückgebe.

Frühere Versionen von SQL Server

Wenn ich CURRENT_TIMEZONE() ausführe gegen meine SQL Server 2017-Instanz, hier ist, was ich bekomme.

SELECT CURRENT_TIMEZONE();

Ergebnis:

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

Ich habe sogar den neuesten Docker-Container mit SQL Server 2017 für Linux heruntergeladen, um dies zu überprüfen, aber ich erhalte immer noch diesen Fehler.

Ich habe auch andere SQL Server 2017-Installationen überprüft, aber mit dem gleichen Ergebnis.

Im Kommentarbereich seiner Online-Dokumentation zu dieser Funktion hat Microsoft angedeutet, dass CURRENT_TIMEZONE() wird auf frühere Versionen von SQL Server portiert, aber dies scheint zum jetzigen Zeitpunkt noch nicht geschehen zu sein.

In der Zwischenzeit können Sie den folgenden Code ausprobieren.

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

Ergebnis:

UTC

Ich habe das auf derselben Instanz von SQL Server 2017 ausgeführt, die CURRENT_TIMEZONE() nicht unterstützt , und es hat wunderbar funktioniert.

Natürlich hängt Ihr Ergebnis davon ab, wo sich Ihr Server befindet (oder zumindest für welche Zeitzone er konfiguriert wurde). Folgendes erhalte ich, wenn ich diese Anweisung auf einem anderen Server ausführe:

W. Europe Standard Time

SQL Server verfügt auch über eine Systemansicht, mit der Sie eine Liste der unterstützten Zeitzonen zurückgeben können, mit der Sie Ihre Ergebnisse hier überprüfen können.