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 | パリの平均時間 |
ウェット | 西ヨーロッパ時間 |
WEST | 西ヨーロッパ夏時間 |
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のドキュメントを参照してください。