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

Ottieni il fuso orario corrente del server in SQL Server (T-SQL)

Microsoft ha introdotto il CURRENT_TIMEZONE() funzione in SQL Server 2019 per la restituzione del fuso orario del server.

In particolare, questa funzione “restituisce il nome del fuso orario osservato da un server o da un'istanza”.

Esempio

Ecco un esempio da dimostrare.

SELECT CURRENT_TIMEZONE();

Risultato:

(UTC) Coordinated Universal Time

In questo caso, il fuso orario della mia istanza di SQL Server è UTC.

Posso vederlo quando eseguo funzioni come SYSDATETIMEOFFSET() .

SELECT SYSDATETIMEOFFSET();

Risultato:

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

UTC ha un fuso orario di +00:00 (nessun offset) e questo si riflette quando restituisco la data e l'ora del sistema.

Versioni precedenti di SQL Server

Se eseguo CURRENT_TIMEZONE() contro la mia istanza di SQL Server 2017, ecco cosa ottengo.

SELECT CURRENT_TIMEZONE();

Risultato:

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

Ho anche scaricato l'ultimo contenitore Docker con SQL Server 2017 per Linux per verificarlo, ma ricevo ancora questo errore.

Ho anche controllato altre installazioni di SQL Server 2017 ma con lo stesso risultato.

Nella sezione commenti della sua documentazione online per questa funzione, Microsoft ha insinuato che CURRENT_TIMEZONE() verrà trasferito su versioni precedenti di SQL Server, ma al momento della stesura di questo non sembra essere accaduto.

Nel frattempo, puoi provare il seguente codice.

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

Risultato:

UTC

L'ho eseguito sulla stessa istanza di SQL Server 2017 che non supporta CURRENT_TIMEZONE() , e ha funzionato perfettamente.

Ovviamente, il tuo risultato dipenderà da dove si trova il tuo server (o almeno, per quale fuso orario è stato configurato). Ecco cosa ottengo se eseguo questa istruzione su un altro server:

W. Europe Standard Time

SQL Server dispone anche di una visualizzazione di sistema che ti consente di restituire un elenco di fusi orari supportati, che puoi utilizzare per eseguire un controllo incrociato dei risultati qui.