複数のフィールドをもつ間隔の正規化 - 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

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

例えば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桁になるので、桁あふれが発生して演算が失敗します。