Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да върнете списък с валидни часови зони в базата данни на Oracle

Понякога трябва да посочим часова зона, когато използваме функции за дата и час в Oracle.

Но там има много часови зони. Как да ги запомним всички? И как да разберем, че нашата система поддържа дадена часова зона?

За щастие можем да потърсим V$TIMEZONE_NAMES преглед, за да върнете списък с валидни часови зони.

Вземете информация за всички часови зони

Следният код връща всички редове и колони от изгледа:

SELECT * FROM V$TIMEZONE_NAMES;

В този изглед има много редове, но ето как изглеждат първите 10 реда:

               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 
...

Можем да видим, че всяко име на региона на часовата зона има повече от едно съответно съкращение. Това се грижи за неща като лятно часово време и др.

Ето таблица, която очертава какво означават някои от съкращенията:

Съкращение на часовата зона Значение
LMT Местно средно време
PMT Средно време в Париж
МОКЛО Западноевропейско време
ЗАПАД Западноевропейско лятно часово време
CET Централноевропейско време
CEST Централноевропейско лятно часово време
EET Източноевропейско време
EEST Източноевропейско лятно часово време

Вземете само имената на регионите

Можем да използваме DISTINCT или UNIQUE клауза за връщане само на имената на регионите на часовата зона без дубликати.

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

Ето как изглеждат първите 10 реда сега:

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

Вземете всички съкращения за дадено име на часова зона

Ето пример за заявка, която връща всички съкращения за дадено име на часова зона:

SELECT 
    TZNAME,
    TZABBREV
FROM V$TIMEZONE_NAMES
WHERE TZNAME LIKE '%Sydney%'
ORDER BY TZNAME ASC;

Резултат:

             TZNAME    TZABBREV 
___________________ ___________ 
Australia/Sydney    LMT         
Australia/Sydney    AEDT        
Australia/Sydney    AEST        

Относно файловете с часови зони

В Oracle Database имената на часовите зони се съдържат във файловете за часови зони.

Можете да направите заявка за V$TIMEZONE_FILE преглед, за да видите коя часова зона се използва в момента от базата данни.

Пример:

SELECT * FROM V$TIMEZONE_FILE;

Резултат:

          FILENAME    VERSION    CON_ID 
__________________ __________ _________ 
timezlrg_32.dat            32         0 

Моята система използва версия 32, която е файлът с часовата зона по подразбиране за Oracle 19c (което използвам). Този файл се намира на следното място:$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat

Вижте документацията на Oracle за Избор на файл с часова зона за повече информация относно файловете с часовата зона.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. (Български) Как да използвате Oracle Database 19c Предварително изградена VM за разработчици

  2. Как да регистрирам/проследя извиквания на съхранени процедури на Oracle със стойности на параметри?

  3. Въведение в методите за събиране на PL/SQL в базата данни на Oracle

  4. SUBSTR() Функция в Oracle

  5. Как да използвам външен ключ в oracle