プロが教えるわが家の防犯対策術!

お世話になります。

データベース(Oracle10g)に「M150401」や「T050501」のように和暦形式で登録されている生年月日を
西暦に変換(18820401・19160501)したく下記SQL

update テーブル名 set 生年月日= to_char(to_date(生年月日,'eyymmdd','nls_calendar = ''Japanese Imperial'''),'yyyymmdd')
を実行すると、「ORA-01864:指定した日付は
現行カレンダの有効範囲外です」のエラーが発生し、大正以前の生年月日を西暦に
変換できません。

このようなケースの場合、どのようにすれば西暦変換できるでしょうか?

よろしくお願いします。

A 回答 (2件)

どこまでやるかの問題だと思います。


普通は明治まで対象にしたい場合が大多数だと思うので、PL/SQLで明治、大正、昭和、平成の開始日(開始年ではありません)から変換するストアドファンクションを作成するのが一番工数も少なくて済むと思います。
明治 1868/9/8~
大正 1912/7/30~
昭和 1926/12/25~
平成 1989/1/8~
    • good
    • 0
この回答へのお礼

nora1962さん

PL/SQLではないのですが、nora1962さんの助言がヒントになり
SQL文のcase when文で元号の開始年をプラスして西暦年を
求める事ができました。月日はそのまま結合すればいいので
完結しました。ありがとうございます。

お礼日時:2011/09/27 00:08

update テーブル名 set 生年月日= to_char(to_date(生年月日,'EYYMMDD'),'YYYYMMDD')


では

この回答への補足

SaKaKashiさん

教えていただいたやり方だと数値の書式エラーが出て使えませんでした。
ありがとうございます。

補足日時:2011/09/27 00:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す