複数のフィールドをもつ間隔の正規化 - Teradata Database - Teradata Vantage NewSQL Engine - ANSI INTERVAL式、関数、複数のフィールドを持つ間隔の正規化。

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/pxz1544241488545.ditamap
dita:ditavalPath
ja-JP/pxz1544241488545.ditaval
dita:id
B035-1211
Product Category
Software
Teradata Vantage

解析プログラムが複数のフィールドの間隔値を正規化する方法のために、間隔値に定義された精度では正規化後の間隔値を入れるのに十分な大きさでないことがあります。

例えばINTERVAL YEAR(2) TO MONTHと定義された列に'99-12'という値を挿入すると、その値は解析プログラムによって'100-00'に正規化されるために、桁あふれエラーを起こします。その値を2桁のYEARフィールドを持つと定義された列に挿入しようとした場合は、年が3桁であるために失敗します。

次の式は、タイプの許容範囲の値を超えているために桁あふれエラーを戻します。

まずテーブルを定義します。

CREATE TABLE BillDateTime
(column_1 INTERVAL YEAR
,column_2 INTERVAL YEAR(1) TO MONTH
,column_3 INTERVAL YEAR(2) TO MONTH
,column_4 INTERVAL YEAR(3) TO MONTH );

ここで、次のINSERT文を使用して値INTERVAL '999-12' YEAR TO MONTHを挿入します。

INSERT BillDateTime (column_1, column_4) 
VALUES ( INTERVAL '40' YEAR, INTERVAL '999-12' YEAR TO MONTH );

INTERVAL YEAR(3) TO MONTHの値の有効な範囲は-'999-11'から'999-11'までなので、結果は桁あふれエラーになります。

'999-12'の値ならば問題がないように見えるかも知れませんが、解析プログラムはその値を'1000-00' YEAR TO MONTH に正規化するので、それも失敗します。年の値は次に4桁になるので、桁あふれが発生して演算が失敗します。