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

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/xmd1556127764262.ditamap
dita:ditavalPath
ja-JP/xmd1556127764262.ditaval
dita:id
B035-1211
Product Category
Software
Teradata Vantage

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という回答は有効な日付ではないからです。