sql >> Database teknologi >  >> RDS >> Oracle

Sådan returneres en liste over gyldige tidszoner i Oracle-databasen

Nogle gange er vi nødt til at angive en tidszone, når vi bruger datetime-funktioner i Oracle.

Men der er mange tidszoner derude. Hvordan husker vi dem alle? Og hvordan ved vi, at vores system understøtter en given tidszone?

Heldigvis kan vi forespørge på V$TIMEZONE_NAMES visning for at returnere en liste over gyldige tidszoner.

Få oplysninger om alle tidszone

Følgende kode returnerer alle rækker og kolonner fra visningen:

SELECT * FROM V$TIMEZONE_NAMES;

Der er mange rækker i denne visning, men her er, hvordan de første 10 rækker ser ud:

               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 
...

Vi kan se, at hvert tidszoneområdes navn har mere end én tilsvarende forkortelse. Dette tager højde for ting som sommertid osv.

Her er en tabel, der skitserer, hvad nogle af forkortelserne betyder:

Tidszoneforkortelse Betydning
LMT Lokal gennemsnitstid
PMT Paris gennemsnitstid
VÅD Vesteuropæisk tid
VEST Vesteuropæisk sommertid
CET Centraleuropæisk tid
CEST Centraleuropas sommertid
EET Østeuropæisk tid
EEST Østeuropa sommertid

Få kun regionsnavnene

Vi kan bruge DISTINCT eller UNIQUE klausul for kun at returnere tidszoneregionsnavnene uden dubletter.

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

Sådan ser de første 10 rækker ud nu:

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

Få alle forkortelser for et givet tidszonenavn

Her er et eksempel på en forespørgsel, der returnerer alle forkortelserne for et givet tidszonenavn:

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

Resultat:

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

Om tidszonefiler

I Oracle Database er tidszonenavne indeholdt i tidszonefiler.

Du kan forespørge på V$TIMEZONE_FILE visning for at se, hvilken tidszonefil der i øjeblikket bruges af databasen.

Eksempel:

SELECT * FROM V$TIMEZONE_FILE;

Resultat:

          FILENAME    VERSION    CON_ID 
__________________ __________ _________ 
timezlrg_32.dat            32         0 

Mit system bruger version 32, som er standardtidszonefilen for Oracle 19c (som er det, jeg bruger). Denne fil er placeret på følgende placering:$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat

Se Oracles dokumentation for at vælge en tidszonefil for at få flere oplysninger om tidszonefiler.


  1. mysql pivot-forespørgselsresultater med GROUP BY

  2. Brug af setDate i PreparedStatement

  3. Størrelsesfølsomme sortering i MySQL

  4. Tips til at opgradere til fra MySQL 5.7 til MySQL 8