sql >> Database >  >> RDS >> Oracle

Een lijst met geldige tijdzones retourneren in Oracle Database

Soms moeten we een tijdzone specificeren bij het gebruik van datetime-functies in Oracle.

Maar er zijn veel tijdzones. Hoe onthouden we ze allemaal? En hoe weten we of ons systeem een ​​bepaalde tijdzone ondersteunt?

Gelukkig kunnen we de V$TIMEZONE_NAMES . opvragen bekijken om een ​​lijst met geldige tijdzones terug te geven.

Ontvang alle tijdzone-info

De volgende code retourneert alle rijen en kolommen uit de weergave:

SELECT * FROM V$TIMEZONE_NAMES;

Er zijn veel rijen in deze weergave, maar zo zien de eerste 10 rijen eruit:

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

We kunnen zien dat elke naam van een tijdzoneregio meer dan één corresponderende afkorting heeft. Dit is geschikt voor zaken als zomertijd, enz.

Hier is een tabel die aangeeft wat sommige afkortingen betekenen:

Tijdzoneafkorting Betekenis
LMT Lokale gemiddelde tijd
PMT Parijse gemiddelde tijd
NAT West-Europese tijd
WESTEN West-Europese zomertijd
CET Midden-Europese tijd
CEST Midden-Europese zomertijd
EET Oost-Europese tijd
EEST Oost-Europese zomertijd

Krijg alleen de regionamen

We kunnen de DISTINCT . gebruiken of UNIQUE clausule om alleen de namen van de tijdzoneregio's te retourneren zonder duplicaten.

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

Zo zien de eerste 10 rijen er nu uit:

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

Krijg alle afkortingen voor een bepaalde tijdzonenaam

Hier is een voorbeeld van een zoekopdracht die alle afkortingen voor een bepaalde tijdzonenaam retourneert:

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

Resultaat:

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

Over tijdzonebestanden

In Oracle Database zijn tijdzonenamen opgenomen in tijdzonebestanden.

U kunt de V$TIMEZONE_FILE . opvragen bekijken om te zien welk tijdzonebestand momenteel door de database wordt gebruikt.

Voorbeeld:

SELECT * FROM V$TIMEZONE_FILE;

Resultaat:

          FILENAME    VERSION    CON_ID 
__________________ __________ _________ 
timezlrg_32.dat            32         0 

Mijn systeem gebruikt versie 32, het standaard tijdzonebestand voor Oracle 19c (wat ik gebruik). Dit bestand bevindt zich op de volgende locatie:$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat

Zie Oracle's documentatie voor het kiezen van een tijdzonebestand voor meer informatie over tijdzonebestanden.


  1. JSON_ARRAY_INSERT() - Waarden invoegen in een JSON-array in MySQL

  2. Afhankelijkheden van SQL Server

  3. Afbeelding opslaan in database-blob; ophalen van db naar Picturebox

  4. Django, mod_wsgi, psycopg2 Onjuist geconfigureerd:fout bij het laden van psycopg2-module:geen module met de naam _psycopg