16.20 - 正規化の定義 - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQL日付と時刻の関数および式

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1211-162K-JPN

正規化プロセスについて、以下にさらに丁寧に説明します。

ソースのdate_expressionまたはtimestamp_expressionのDAYフィールドが、結果のターゲットDAYフィールドよりも大きい場合、ADD_MONTHSはDDを、その月の最後の日付+nに設定して、レポートされる日付またはタイムスタンプを正規化します。

分かりやすくするため、date_expressionを'YYYY-MM-DD'と定義します。

与えられたdate_expressionに対して、ADD_MONTHSの構文を次のように表現できます。

ADD_MONTHS('YYYY-MM-DD' , n)

nが負の数にもなりうることに留意してください。また、次に示すように、date_expressionに対して'YYYY-MM-DD'を代用して、ADD_MONTHSをANSI SQL:2011の日付および間隔の形に再定義することができます。

ADD_MONTHS('YYYY-MM-DD', n) = 'YYYY-MM-DD' ± INTERVAL 'n' MONTH

この等式は1999-09-31のような有効でない日付でない限り真です。有効でない日付の場合は、ANSI式は有効でない日付例外をトラップしてエラーを戻します。

一方、ADD_MONTHSは、例外を処理して有効な日付を戻しますが、それは必ずしも、期待された日付ではないかもしれません。ADD_MONTHSが使うアルゴリズムは、その正規化された結果を生成し、次のような擬似コードとして表わします。

WHEN
DD > last_day_of_the_month(MM+n)
THEN SET
DD = last_day_of_the_month(MM+n)

この特性は、任意のtimestamp_expressionの日付部分にも当てはまります。

正規化により、うるう年に対しても有効な結果が生成されます。