例: 直感的には理解できない例 - 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

以下の例では、date_expressionのDAYの値、またはtimestamp_expressionの日付要素が29、30、または31の場合に、ADD_MONTHS関数の結果が常に期待通りにはならないことを例示しています。

単純にするために、すべての例でdate_expressionを使用しています。どのケースでも、関数は設計どおりに動作しています。

例: 無効な日付を問合わせる

この例では、SELECT文の結果は、1996年2月の日付です。1996年2月31日が有効な日付だったとしたらそうなっていたはずですが、2月31日は有効な日付ではないので、ADD_MONTHSは答えを正規化します。

元の日付のDAY値がターゲットの月の最後のDAY値よりも大きかった場合には、この結果は、targetの月の最後の有効なDAY値になります。

SELECT ADD_MONTHS ('1995-12-31', 2);

この例の結果は1996-02-29 になります。

1996年がうるう年だったことに注意する必要があります。間隔が2ヶ月ではなく14ヶ月である場合、結果は'1997-02-28'になります。

例: 現在の日付の前の月を問合わせる

この文は、例: 現在の日付から1ヶ月後の日付を問合わせるのADD_MONTHS関数の逆を実行します。

例の元の日付である‘1999-01-30’に戻るはずと思われますが、そうはなりません。

SELECT ADD_MONTHS ('1999-02-28' , -1);

ADD_MONTHSは結果として1999-01-28を戻します。

関数は設計どおりに実行し、結果はエラーではありませんが、例: 現在の日付から1ヶ月後の日付を問合わせるから期待した結果ではないでしょう。

例: 現在の日付から1ヶ月後の日付で、28日に終わる月を問合わせる

次の文は‘1999-03-31’を戻すものと期待されますが、そうなりません。

SELECT ADD_MONTHS ('1999-02-28' , 1);

ADD_MONTHSは結果として1999-03-28を戻します。

例: 現在の日付から1ヶ月後の日付で、30日に終わる月を問合わせる

次の文は‘1999-03-31’を戻すものと期待されますが、そうなりません。

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

ADD_MONTHSは結果として1999-03-30を戻します。

例: 現在の日付から1ヶ月後の日付で、30日に終わる月を問合わせる

次の文から'1999-05-31'が返されるものと考えられますが、結果は異なります。

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

ADD_MONTHSは結果として1999-05-30を戻します。