17.10 - ADD_MONTHSの直感的でない結果 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLの日付/時刻関数と式

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1211-171K-JPN
Language
日本語 (日本)

ADD_MONTHSが行なう正規化のために、関数の結果の多くは直感的なものではなく、逆の計算の結果は必ずしも元通りにはなりません。例えば、例: 現在の日付から1ヶ月後の日付を問合わせるの結果を例: 現在の日付の前の月を問合わせるの結果と比較してください。

これは、この関数が常に有効な日付を生成するものの、必ずしもexpected日付を生成するわけではないためです。月の間隔の算術の正確さは、相対的にとらえるべき問題です。どんな定義も任意定義であって汎用化することはできないので、「期待通り」と言う語は、ADD_MONTHSの動作の説明としてより良い表現であるに過ぎません。

次の SELECT文は、有効であり期待通りの日付を戻します。

SELECT ADD_MONTHS ('1999-08-15' , 1);

この文は1999-09-15を戻します。

SELECT ADD_MONTHS ('1999-09-30' , -1);

この文は1999-08-30を戻します。

次のSELECT文は有効な日付を戻しますが、その「正確さ」は、どのように「1ヶ月」を定義するかにより異なります。

SELECT ADD_MONTHS ('1999-08-31' , 1);

この文は1999-09-30を戻します。これは、9月には30日までしかなく、正規化されていない1999-09-31という回答は有効な日付ではないからです。