Oracle10g で、良く解らない動作をしているので、残しておく。 「和暦 → 西暦」の変換するためのファンクションを、下記SQLを元に作成した。 SELECT TO_CHAR( TO_DATE( 'H230505', 'EYYMMDD', 'nls_calendar = ' 'Japanese Imperial''' ), 'YYYYMMDD' ) FROM DUAL もちろん"H230505"の部分は引数だよね。 和暦部分(H230505)が正しい日付の場合は、問題無く変換できるのだが、 この部分が(H230558 や H05234a)等変換できない文字列の場合、例外が発生する。 おぉ、順調じゃんっ! とか考えてテストを進めて居ると、問題が発生っ! 例外が発生した後に、 SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL 数字が変になる… 例:2011年04月12日の場合 TO_CHAR( SYSDATE, 'YYYYMMDD' ) → 00230412 何だこりゃ…?デフォルトは西暦だよな…なぜ??? とか思い、良く見てみると、「23」和暦じゃんっ!!! SYSDATEだけじゃなく、TO_DATEを使うなどしても" 全て和暦表示 "になってしまう。 セッションを閉じるまで永遠と……意味が解らん…… (セッションを切って繋ぎ直すと、デフォルト(西暦)に戻る) これは、SQLを連続実行では発生しない。 あくまでも、西暦変換処理を PL/SQL(ファンクション) 化し、呼び出す事により発生するようだ。 実験結果: 和暦変換('H2305AA') → 和暦表示になる 和暦変換('H2305AA') → 和暦変換('H230505') → 西暦表示になる 1回でも正常形を通せば戻るようだ… すごく謎なので、メモとして残しておく。 ハァ…どうしよう。