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.