17.05 - ANSI DateTimeの考慮事項 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-175K-JPN
Language
日本語 (日本)

INTEGERDATEモードのDATE値を除いて、DateTimeおよびIntervalデータの外部値は、そのセッションの指定されたクライアント文字集合において、固定長CharFix文字列(論理文字)として表わされています。

USINGリクエスト修飾子で提供する、DateTime値として使用するクライアント データの型は、適切なDateTime型またはCHARACTER(n)のいずれかとして定義できます。ここでnは、文字列のDateTimeまたはIntervalデータ型の外部形式として適切な長さで、この文字列はDateTime値またはInterval値を表わすために内部的に使用されます。

クライアントがANSI DateTimeのデータ型を認識せずにUSINGデータを作成する場合は、それらのフィールドはCHARACTER(n)としてTYPE指定されます。次に、それらのUSING値がINSERTまたはUPDATEの割当てリストに表示される場合は、そのフィールド名は、USING節から直接使用されます。

次に例を示します。

     USING (TimeVal  CHARACTER(11),
            NumVal   INTEGER,
            TextVal (CHARACTER(5))
     INSERT INTO TABLE_1 (:TimeVal, :NumVal, :TextVal);

ANSI DateTimeをUSINGリクエスト修飾子付きでインポートし、その値がINSERTまたはUPDATE以外の処置に使用される場合は、その値を外部文字形式から適正なANSI DateTime型に明示的にCASTしなければなりません。

次に例を示します。

     USING (TimeVal CHARACTER(11),
            NumVal INTEGER)
     UPDATE TABLE_1
     SET TimeField=:TimeVal, NumField=:NumVal
     WHERE CAST(:TimeVal AS TIME(2)) > TimeField;

割り当てのためにこのUSINGリクエスト修飾子でTimeVal CHARACTER(11)を直接使用してもかまいませんが、TimeFieldはTIME(2)と定義されているANSI TIMEであるために、テーブル内のフィールド値TimeFieldを比較するには、列データ定義を明示的にTIME(2)にCASTする必要があります。

DateTimeおよびInterval値の両方の宣言を使用して、USINGリクエスト修飾子では外部文字列の値をDateTimeまたはInterval値として扱うことができます。このような値をインポートするためには、それらの文字列を直接USINGリクエスト修飾子にインポートします。

値をUSINGリクエスト修飾子に移動しても、文字列データが型定義で示された有効な内部DateTime値またはInterval値に変換されない場合は、システムはエラーをアプリケーションに返します。