Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zwrócić listę prawidłowych stref czasowych w bazie danych Oracle

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstawianie znaków narodowych do kolumny oracle NCHAR lub NVARCHAR nie działa

  2. Wstaw, jeśli nie istnieje Oracle

  3. 4 sposoby formatowania liczby bez ułamków dziesiętnych w Oracle

  4. Proste zapytania rekurencyjne w Oracle

  5. NEXT_DAY() Funkcja w Oracle