ORA-01841: (周)年は-4713と+9999の間の0以外の数字を指定する必要があります

ORA-01841: (周)年は-4713と+9999の間の0以外の数字を指定する必要があります

オラクルで以下SQLを発行するとありえない日付でもエラーとはなりません。

SELECT TO_DATE('99991231','YYYYMMDD') FROM DUAL

但しこれに+1すると、「ORA-01841: (周)年は-4713と+9999の間の0以外の数字を指定する必要があります」とエラーが出ます。

SELECT TO_DATE('99991231','YYYYMMDD')+1 FROM DUAL

これは日付の範囲が-4713~9999までの為のようです。その為設計時は99991231の扱いを気にするべきです。

例えば電話の契約開始日、契約終了日をテーブルに持つとします。

電話を契約するに当たり、契約開始日は入るとしても、契約終了日はどうするべきかということです。電話の契約終了日なんて普通決まってませんので、NULLとするべきかですが、NULLにするのならNULL考慮が必要ですし、99991231を入れる、という決め事をすると今回の+1するとエラーになることを考慮しなくてはいけません。

個人的には29991231でいいのでは?と思います。この日付に+1しても30000101になるだけです。

コメント

タイトルとURLをコピーしました