Czasami musimy określić strefę czasową podczas korzystania z funkcji datetime w Oracle.
Ale istnieje wiele stref czasowych. Jak je wszystkie pamiętamy? A skąd wiemy, że nasz system obsługuje daną strefę czasową?
Na szczęście możemy wysłać zapytanie do V$TIMEZONE_NAMES
widok, aby zwrócić listę prawidłowych stref czasowych.
Pobierz wszystkie informacje o strefie czasowej
Poniższy kod zwraca wszystkie wiersze i kolumny z widoku:
SELECT * FROM V$TIMEZONE_NAMES;
W tym widoku jest wiele wierszy, ale tak wygląda pierwsze 10 wierszy:
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 ...
Widzimy, że każda nazwa regionu strefy czasowej ma więcej niż jeden odpowiedni skrót. Zapewnia to takie rzeczy, jak czas letni itp.
Oto tabela przedstawiająca znaczenie niektórych skrótów:
Skrót strefy czasowej | Znaczenie |
---|---|
LMT | Średni czas lokalny |
PMT | Paryski czas średni |
MOKRO | Czas zachodnioeuropejski |
ZACHÓD | Czas zachodnioeuropejski letni |
CET | Czas środkowoeuropejski |
CEST | Czas letni dla Europy Środkowej |
EET | Czas wschodnioeuropejski |
WST. | Czas letni dla Europy Wschodniej |
Pobierz tylko nazwy regionów
Możemy użyć DISTINCT
lub UNIQUE
klauzula zwracająca tylko nazwy regionów stref czasowych bez duplikatów.
SELECT DISTINCT TZNAME
FROM V$TIMEZONE_NAMES
ORDER BY TZNAME ASC;
Oto jak teraz wygląda pierwsze 10 wierszy:
TZNAME _____________________ Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau ...
Pobierz wszystkie skróty dla danej nazwy strefy czasowej
Oto przykład zapytania, które zwraca wszystkie skróty dla danej nazwy strefy czasowej:
SELECT
TZNAME,
TZABBREV
FROM V$TIMEZONE_NAMES
WHERE TZNAME LIKE '%Sydney%'
ORDER BY TZNAME ASC;
Wynik:
TZNAME TZABBREV ___________________ ___________ Australia/Sydney LMT Australia/Sydney AEDT Australia/Sydney AEST
Informacje o plikach stref czasowych
W Oracle Database nazwy stref czasowych są zawarte w plikach stref czasowych.
Możesz wysłać zapytanie do V$TIMEZONE_FILE
Zobacz, który plik strefy czasowej jest aktualnie używany przez bazę danych.
Przykład:
SELECT * FROM V$TIMEZONE_FILE;
Wynik:
FILENAME VERSION CON_ID __________________ __________ _________ timezlrg_32.dat 32 0
Mój system używa wersji 32, która jest domyślnym plikiem strefy czasowej dla Oracle 19c (której używam). Ten plik znajduje się w następującej lokalizacji:$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat
Więcej informacji na temat plików stref czasowych można znaleźć w dokumentacji Oracle dotyczącej wyboru pliku strefy czasowej.