SQL> -- 新元号「令和」と略称「R」のEUC文字コードを調べる。
SQL> SELECT
2 DUMP(CONVERT('令和', 'JA16EUC' , 'AL32UTF8'), 16) AS REIWA
3 , DUMP(CONVERT('R' , 'JA16EUC' , 'AL32UTF8'), 16) AS R
4 FROM DUAL ;
REIWA R
------------------------------------------------ ------------------------------
Typ=1 Len=4: ce,e1,cf,c2 Typ=1 Len=1: 52
-- ${ORACLE_HOME}/nls の定義ファイル(テキストファイル) 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
-- lxegen実行
-- コマンドプロンプトから
lxegen
NLS Calendar Utility: Release 18.0.0.0.0 - Production
Version 18.1.0.0.0
Copyright (c) 1994, 2018, Oracle. All rights reserved.
-- Oracle Database を再起動
SQL> shutdown immediate ;
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。
Total System Global Area 1610610024 bytes
Fixed Size 9028968 bytes
Variable Size 620756992 bytes
Database Buffers 973078528 bytes
Redo Buffers 7745536 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL>
SQL> -- 動作確認
SQL> COLUMN GREGORIAN_CALENDAR FORMAT A18
SQL> COLUMN SHORT_ERA FORMAT A9
SQL> COLUMN LONG_ERA FORMAT A16
SQL> SELECT
2 TO_CHAR(B.DATES, 'YYYY/MM/DD') AS GREGORIAN_CALENDAR
3 , TO_CHAR(B.DATES, 'EYY/MM/DD' , 'NLS_CALENDAR=''JAPANESE IMPERIAL''') AS SHORT_ERA
4 , TO_CHAR(B.DATES, 'EEYY"年"MM"月"DD"日"', 'NLS_CALENDAR=''JAPANESE IMPERIAL''') AS LONG_ERA
5 FROM(
6 -- DATE_FROM <= 範囲 <= DATE_TO
7 SELECT A.DATE_FROM + ROWNUM - 1 AS DATES
8 FROM(
9 SELECT TO_DATE('2019/04/25', 'YYYY/MM/DD') AS DATE_FROM
10 , TO_DATE('2019/05/05', 'YYYY/MM/DD') AS DATE_TO
11 FROM DUAL
12 ) A
13 CONNECT BY LEVEL <= A.DATE_TO - A.DATE_FROM + 1
14 ) B ;
GREGORIAN_CALENDAR SHORT_ERA LONG_ERA
------------------ --------- ----------------
2019/04/25 H31/04/25 平成31年04月25日
2019/04/26 H31/04/26 平成31年04月26日
2019/04/27 H31/04/27 平成31年04月27日
2019/04/28 H31/04/28 平成31年04月28日
2019/04/29 H31/04/29 平成31年04月29日
2019/04/30 H31/04/30 平成31年04月30日
2019/05/01 R01/05/01 令和01年05月01日
2019/05/02 R01/05/02 令和01年05月02日
2019/05/03 R01/05/03 令和01年05月03日
2019/05/04 R01/05/04 令和01年05月04日
2019/05/05 R01/05/05 令和01年05月05日
11行が選択されました。
Oracle Database に 新しい元号(年号)Oracle Database に 新しい元号(年号)
Oracle Database の DUMP関数 と CONVERT関数 で 文字列のバイトコードを調べる。
Oracle SQL 連番や連続した日付を取得