Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Obtenir le fuseau horaire actuel du serveur dans SQL Server (T-SQL)

Microsoft a introduit le CURRENT_TIMEZONE() fonction dans SQL Server 2019 pour renvoyer le fuseau horaire du serveur.

Plus précisément, cette fonction « renvoie le nom du fuseau horaire observé par un serveur ou une instance ».

Exemple

Voici un exemple pour illustrer.

SELECT CURRENT_TIMEZONE();

Résultat :

(UTC) Coordinated Universal Time

Dans ce cas, le fuseau horaire de mon instance de SQL Server est UTC.

Je peux le voir lorsque j'exécute des fonctions comme SYSDATETIMEOFFSET() .

SELECT SYSDATETIMEOFFSET();

Résultat :

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

UTC a un décalage de fuseau horaire de +00:00 (pas de décalage), et cela se reflète lorsque je renvoie la date et l'heure du système.

Versions antérieures de SQL Server

Si j'exécute CURRENT_TIMEZONE() contre mon instance SQL Server 2017, voici ce que j'obtiens.

SELECT CURRENT_TIMEZONE();

Résultat :

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

J'ai même téléchargé le dernier conteneur Docker avec SQL Server 2017 pour Linux pour vérifier cela, mais j'obtiens toujours cette erreur.

J'ai également vérifié d'autres installations de SQL Server 2017 mais avec le même résultat.

Dans la section des commentaires de sa documentation en ligne pour cette fonction, Microsoft a insinué que CURRENT_TIMEZONE() sera porté sur les versions antérieures de SQL Server, mais cela ne semble pas s'être produit au moment de la rédaction de cet article.

En attendant, vous pouvez essayer le code suivant.

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

Résultat :

UTC

J'ai exécuté cela sur la même instance de SQL Server 2017 qui ne prend pas en charge CURRENT_TIMEZONE() , et cela a très bien fonctionné.

Évidemment, votre résultat dépendra de l'emplacement de votre serveur (ou du moins du fuseau horaire pour lequel il a été configuré). Voici ce que j'obtiens si j'exécute cette instruction sur un autre serveur :

W. Europe Standard Time

SQL Server dispose également d'une vue système qui vous permet de renvoyer une liste des fuseaux horaires pris en charge, que vous pouvez utiliser pour vérifier vos résultats ici.