月の間隔の算術に対する標準的なアプローチは、適宜 MONTH および YEAR 値を増分し、DAY のソース値を保存することです。この方法では、ターゲット月の日数がソース日付のDAY値よりも小さい場合に問題になります。
例えば、'1999-01-31'というソースDATE値に1 MONTHを加算する場合、結果を処理するためにどんなアプローチをとるべきでしょうか。標準的なアプローチを使えば、結果は'1999-02-31'になりますが、2月31日は有効な日付ではありません。
ADD_MONTHSの動作は、ANSI SQL:2011準拠の演算であるDATE ± INTERVAL ‘n’ MONTHおよびTIMESTAMP ± INTERVAL ‘n’ MONTHの動作に相当しますが、1つの重要な違いがあります。
これら2つのスカラー算術演算の相違点は、有効でない日付値が関数から戻される場合のそれぞれの動作にあります。
- ANSI SQL:2011の算術はエラーを戻します。
- ADD_MONTHS 算術は規定の調整を行ない、有効な日付を戻します。