| 項目 | バージョン |
|---|---|
| OS | Windows Server 2016/2019/2022/2025 |
| Oracle | 19c |
■oracle19cでは令和対応してない
令和という元号が決まったタイミングとoracle19cのリリースタイミングの関係と思いますが、oracle19cでは標準で「令和」元号に対応してませんでした。ここでは元号「令和」を扱えるようにするための設定手順を整理します。
■lxegenコマンドでNLS_CALENDARを令和対応する手順
「lxegen」というコマンドを用いて、NLS_CALENDARで「令和」を扱えるようにします。
- テキストファイル「lxecal.nlt」を準備する
- Oracle_Home配下の「nls」フォルダ内にlxecal.nltのファイルを配置する(内容は後述)
- 「lxegen」コマンドを実行し、「lxecalji.nlb」を生成する(この時、lxegenコマンドのパスが通っていることに注意する)
- Oracleサービスを再起動する
- 確認用のコマンドを実行して「令和」、「R」表記の確認する
(lxecal.nltの内容)
DEFINE calendar
calendar_name = "Japanese Imperial"
DEFINE calendar_era
era_full_name = CEE1CFC2 -- 令和(EUC hex)
era_abbr_name = 52 -- R
start_date = "MAY-01-2019 AD" -- 元年
-- end_date = "DEC-31-9999 AD"
ENDDEFINE calendar_era
ENDDEFINE calendar
■実行結果比較方法
以下のSQLを対応前後で実行することでどのように変わるか確認します。
SELECT
to_char(date '2019-04-30','e.yy-mm-dd', 'NLS_CALENDAR=''JAPANESE IMPERIAL''') AS "略表記平成",
to_char(date '2019-04-30','eeyy"年"mm"月"dd"日"', 'NLS_CALENDAR=''JAPANESE IMPERIAL''') AS "フル表記平成",
SUBSTR(TO_CHAR(date '2019-04-30', 'EYYMM', 'nls_calendar = ''Japanese Imperial'''), 2, 4) AS "YYMM平成",
to_char(date '2019-05-01','e.yy-mm-dd', 'NLS_CALENDAR=''JAPANESE IMPERIAL''') AS "略表記令和",
to_char(date '2019-05-01','eeyy"年"mm"月"dd"日"', 'NLS_CALENDAR=''JAPANESE IMPERIAL''') AS "フル表記令和",
SUBSTR(TO_CHAR(date '2019-05-01', 'EYYMM', 'nls_calendar = ''Japanese Imperial'''), 2, 4) AS "YYMM令和"
FROM
dual;
■実行手順(キャプチャ)
最初に用意したSQLを実行して結果を確認します。略表記は「平成」を英語の頭文字で「H」、フル表記は「平成」と表示されることを確認します。2019/05/01から「令和」ですが、今回の対応実施前は平成31年5月1日として扱われて表示されることがわかります。

用意する「lxecal.nlt」ファイルです。文字コードはANSIで保存します。

今回確認した環境のORACLE_HOMEは「C:\oracle」でしたので「C:\oracle\nls」配下に「lxecal.nlt」を保存しました。

コマンドプロンプトより「lxegen」コマンドを実行します。特に出力はありませんが、先ほど「lxecal.nlt」を保存したフォルダに「lxecalji.nlb」ファイルが生成されていることを確認しておきます。


Oracleのサービスを再起動後、最初に流したSQLを再度実行します。2019/05/01が「令和01年05月01日」と表示されることを確認します。(英語略称は「R」です。)

コメントを残す