sql >> Databáze >  >> RDS >> Sqlserver

Získejte aktuální časové pásmo serveru v SQL Server (T-SQL)

Microsoft představil CURRENT_TIMEZONE() funkce v SQL Server 2019 pro vrácení časového pásma serveru.

Přesněji řečeno, tato funkce „vrací název časového pásma sledovaného serverem nebo instancí“.

Příklad

Zde je příklad k demonstraci.

SELECT CURRENT_TIMEZONE();

Výsledek:

(UTC) Coordinated Universal Time

V tomto případě je časové pásmo mé instance SQL Serveru UTC.

Vidím to, když spouštím funkce jako SYSDATETIMEOFFSET() .

SELECT SYSDATETIMEOFFSET();

Výsledek:

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

UTC má posun časového pásma +00:00 (žádný posun), což se projeví, když vrátím systémové datum a čas.

Starší verze SQL Server

Pokud spustím CURRENT_TIMEZONE() proti mé instanci SQL Server 2017 dostanu toto.

SELECT CURRENT_TIMEZONE();

Výsledek:

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

Dokonce jsem si stáhl nejnovější kontejner Docker s SQL Server 2017 pro Linux, abych to zkontroloval, ale stále se mi zobrazuje tato chyba.

Zkontroloval jsem také další instalace SQL Server 2017, ale se stejným výsledkem.

V sekci komentářů své online dokumentace pro tuto funkci Microsoft naznačil, že CURRENT_TIMEZONE() bude portován na dřívější verze SQL Serveru, ale nezdá se, že by se to stalo v době psaní tohoto článku.

Mezitím můžete vyzkoušet následující kód.

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

Výsledek:

UTC

Spustil jsem to na stejné instanci SQL Server 2017, která nepodporuje CURRENT_TIMEZONE() a fungovalo to dobře.

Je zřejmé, že váš výsledek bude záviset na tom, kde se váš server nachází (nebo alespoň na jakém časovém pásmu byl nakonfigurován). Zde je to, co dostanu, když spustím tento příkaz na jiném serveru:

W. Europe Standard Time

SQL Server má také systémové zobrazení, které vám umožňuje vrátit seznam podporovaných časových pásem, které můžete použít ke křížové kontrole výsledků zde.


  1. Převeďte uniklý znak Unicode zpět na skutečný znak v PostgreSQL

  2. Datový model chytré domácnosti

  3. Generování postgresql uživatelského hesla

  4. Jak seřadit výsledek z string_agg()