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.