sql >> Databasteknik >  >> RDS >> Oracle

Hur man returnerar en lista över giltiga tidszoner i Oracle Database

Ibland behöver vi ange en tidszon när vi använder datetime-funktioner i Oracle.

Men det finns många tidszoner där ute. Hur minns vi dem alla? Och hur vet vi att vårt system stöder en given tidszon?

Lyckligtvis kan vi fråga V$TIMEZONE_NAMES visa för att returnera en lista över giltiga tidszoner.

Få information om all tidszon

Följande kod returnerar alla rader och kolumner från vyn:

SELECT * FROM V$TIMEZONE_NAMES;

Det finns många rader i den här vyn, men så här ser de första 10 raderna ut:

               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 att varje tidszons regionnamn har mer än en motsvarande förkortning. Detta tillgodoser saker som sommartid, etc.

Här är en tabell som beskriver vad några av förkortningarna betyder:

Tidszonsförkortning Betydning
LMT Lokal medeltid
PMT Paris medeltid
VÅTT Västeuropeisk tid
VÄST Västeuropeisk sommartid
CET Centraleuropatid
CEST Centraleuropa sommartid
EET Östeuropatid
EEST Östeuropa sommartid

Få bara regionnamnen

Vi kan använda DISTINCT eller UNIQUE sats för att bara returnera namnen på tidszonsregionen utan dubbletter.

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

Så här ser de första 10 raderna ut nu:

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

Hämta alla förkortningar för ett givet tidszonsnamn

Här är ett exempel på en fråga som returnerar alla förkortningar för ett givet tidszonsnamn:

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 tidszonsfiler

I Oracle Database finns tidszonsnamn i tidszonsfiler.

Du kan fråga V$TIMEZONE_FILE visa för att se vilken tidszonsfil som för närvarande används av databasen.

Exempel:

SELECT * FROM V$TIMEZONE_FILE;

Resultat:

          FILENAME    VERSION    CON_ID 
__________________ __________ _________ 
timezlrg_32.dat            32         0 

Mitt system använder version 32, vilket är standardtidszonsfilen för Oracle 19c (vilket är vad jag använder). Den här filen finns på följande plats:$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat

Se Oracles dokumentation för att välja en tidszonsfil för mer information om tidszonsfiler.


  1. Hur man inkluderar exkluderade rader i ÅTERKOMMANDE från INFOGA ... VID KONFLIKT

  2. Hur man använder SUBSTRING() i MySQL

  3. Subtrahera minuter från ett tidsvärde i PostgreSQL

  4. syntax för en rad MERGE / upsert i SQL Server