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

Comment renvoyer une liste de fuseaux horaires valides dans la base de données Oracle

Parfois, nous devons spécifier un fuseau horaire lors de l'utilisation des fonctions datetime dans Oracle.

Mais il y a beaucoup de fuseaux horaires. Comment se souvient-on de tous ? Et comment savons-nous que notre système prend en charge un fuseau horaire donné ?

Heureusement, nous pouvons interroger le V$TIMEZONE_NAMES view pour renvoyer une liste de fuseaux horaires valides.

Obtenir toutes les informations sur le fuseau horaire

Le code suivant renvoie toutes les lignes et colonnes de la vue :

SELECT * FROM V$TIMEZONE_NAMES;

Il y a beaucoup de lignes dans cette vue, mais voici à quoi ressemblent les 10 premières lignes :

               TZNAME    TZABBREV    CON_ID 
_____________________ ___________ _________ 
Africa/Abidjan        LMT                 0 
Africa/Abidjan        GMT                 0 
Africa/Accra          LMT                 0 
Africa/Accra          GMT                 0 
Africa/Accra          +0020               0 
Africa/Addis_Ababa    LMT                 0 
Africa/Addis_Ababa    EAT                 0 
Africa/Addis_Ababa    +0230               0 
Africa/Addis_Ababa    +0245               0 
Africa/Algiers        LMT                 0 
...

Nous pouvons voir que chaque nom de région de fuseau horaire a plus d'une abréviation correspondante. Cela couvre des choses comme l'heure d'été, etc.

Voici un tableau qui décrit la signification de certaines abréviations :

Abréviation du fuseau horaire Signification
LMT Heure moyenne locale
PMT Heure moyenne de Paris
HUMIDE Heure d'Europe de l'Ouest
OUEST Heure d'été d'Europe occidentale
HEC Heure d'Europe centrale
CEST Heure d'été d'Europe centrale
EET Heure de l'Europe de l'Est
EST Heure d'été de l'Europe de l'Est

Obtenir uniquement les noms de région

Nous pouvons utiliser le DISTINCT ou UNIQUE clause pour renvoyer uniquement les noms de région de fuseau horaire sans doublons.

SELECT DISTINCT TZNAME 
FROM V$TIMEZONE_NAMES
ORDER BY TZNAME ASC;

Voici à quoi ressemblent maintenant les 10 premières lignes :

               TZNAME 
_____________________ 
Africa/Abidjan        
Africa/Accra          
Africa/Addis_Ababa    
Africa/Algiers        
Africa/Asmara         
Africa/Asmera         
Africa/Bamako         
Africa/Bangui         
Africa/Banjul         
Africa/Bissau         
...

Obtenir toutes les abréviations pour un nom de fuseau horaire donné

Voici un exemple de requête renvoyant toutes les abréviations d'un nom de fuseau horaire :

SELECT 
    TZNAME,
    TZABBREV
FROM V$TIMEZONE_NAMES
WHERE TZNAME LIKE '%Sydney%'
ORDER BY TZNAME ASC;

Résultat :

             TZNAME    TZABBREV 
___________________ ___________ 
Australia/Sydney    LMT         
Australia/Sydney    AEDT        
Australia/Sydney    AEST        

À propos des fichiers de fuseau horaire

Dans Oracle Database, les noms de fuseau horaire sont contenus dans des fichiers de fuseau horaire.

Vous pouvez interroger le V$TIMEZONE_FILE vue pour voir quel fichier de fuseau horaire est actuellement utilisé par la base de données.

Exemple :

SELECT * FROM V$TIMEZONE_FILE;

Résultat :

          FILENAME    VERSION    CON_ID 
__________________ __________ _________ 
timezlrg_32.dat            32         0 

Mon système utilise la version 32, qui est le fichier de fuseau horaire par défaut pour Oracle 19c (ce que j'utilise). Ce fichier se trouve à l'emplacement suivant :$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat

Consultez la documentation d'Oracle pour le choix d'un fichier de fuseau horaire pour plus d'informations sur les fichiers de fuseau horaire.