CAST 指定

CAST 指定は、data-type によって指定されたタイプにキャストされたキャスト・オペランド (第 1 オペランド) を戻します。 キャストがサポートされていない場合、エラー (SQLSTATE 42846) が戻されます。

cast-specification
構文図を読む構文図をスキップする CAST1 ( expressionNULLparameter-markerASdata-typeSCOPE2typed-table-nametyped-view-namecursor-cast-specificationrow-cast-specificationinterval-cast-specification )
cursor-cast-specification
構文図を読む構文図をスキップするparameter-markerAS CURSORcursor-type-name
row-cast-specification
構文図を読む構文図をスキップする row-expressionNULLparameter-marker AS row-type-name
interval-cast-specification
構文図を読む構文図をスキップする string-constant AS INTERVAL
data-type
構文図を読む構文図をスキップするbuilt-in-typearray-type-namedistinct-type-namestructured-type-nameREF( type-name2)
built-in-type
構文図を読む構文図をスキップするSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( integer,0, integer)FLOAT(53)( integer)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( integerOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( integerOCTETSCODEUNITS32)FOR BIT DATA3CLOBCHARACTERCHARLARGE OBJECT(1M)( integerKMGOCTETSCODEUNITS32)GRAPHIC(1)( integerCODEUNITS16CODEUNITS32)VARGRAPHIC( integerCODEUNITS16CODEUNITS32)DBCLOB(1M)( integerKMGCODEUNITS16CODEUNITS32)NCHARNATIONALCHARCHARACTER(1)( integer)NVARCHARNCHAR VARYINGNATIONALCHARCHARACTERVARYING( integer)NCLOBNCHAR LARGE OBJECTNATIONAL CHARACTER LARGE OBJECT(1M)( integerKMG)BINARY(1)( integer)VARBINARYBINARY VARYING( integer)BLOBBINARY LARGE OBJECT(1M)( integerKMG)DATETIMETIMESTAMP(6)( integer)BOOLEANXMLSYSPROC.Db2SECURITYLABEL
注:
  • 1 互換性のために、:: を型キャスト演算子として使用できます。 例えば、ステートメント C1::INTEGERcast(C1 as INTEGER) は同等です。
  • 2 SCOPE 節が適用されるのは、REF データ・タイプのみです。
  • 3 FOR BIT DATA 節とその後に続く他の列制約とは、任意の順序で指定できます。FOR BIT DATA 節をストリング単位 CODEUNITS32 とともに指定することはできません (SQLSTATE 42613)。
expression
キャスト・オペランドが式 (パラメーター・マーカーまたは NULL ではなく) である場合、結果は、指定されたターゲット data-type に変換された引数値です。

文字ストリング (CLOB 以外) を長さの異なる文字ストリングにキャストするとき、後続ブランク以外の文字が切り捨てられると、警告 (SQLSTATE 01004) が戻されます。 GRAPHIC ストリング (DBCLOB 以外) を長さの異なる GRAPHIC ストリングにキャストするとき、後続ブランク以外の文字が切り捨てられると、警告 (SQLSTATE 01004) が戻されます。 キャスト・オペランドが BLOB、CLOB、および DBCLOB の場合、何らかの文字が切り捨てられると警告が発行されます。

配列をキャストするとき、 ターゲット・データ・タイプはユーザー定義の配列データ・タイプでなければなりません (SQLSTATE 42821)。 配列の要素のデータ・タイプは、ターゲット配列データ・タイプの要素のデータ・タイプと同じでなければなりません (SQLSTATE 42846)。 配列のカーディナリティーは、ターゲット配列データ・タイプの最大カーディナリティー以下でなければなりません (SQLSTATE 2202F)。

NULL
キャスト・オペランドがキーワード NULL である場合、結果は、指定された data-type の NULL 値です。
parameter-marker
パラメーター・マーカーは通常は式と見なされますが、ここでは特別な意味を持つため別個に説明します。 キャスト・オペランドが parameter-marker である場合、指定された data-type は、指定されたデータ・タイプに置き換えが割り当て可能である (ストリングの記憶割り当てを使用して) ことを示す合意であると見なされます。 このようなパラメーター・マーカーは、型付きパラメーター・マーカー と見なされます。 型付きパラメーター・マーカーは、関数解決、選択リストの DESCRIBE、または列割り当てを行う目的で、他の型付き値と同じように扱われます。
cursor-cast-specification
パラメーター・マーカーがカーソル・タイプと予想されることを表す場合に使用される CAST 指定。 カーソル・タイプを許可するコンテキスト内の、式がサポートされている任意の場所で使用できます。
parameter-marker
キャスト・オペランドはパラメーター・マーカーの一種で、指定されたカーソル・タイプに対して置き換えが割り当て可能であることを示す合意と見なされます。
CURSOR
組み込みデータ・タイプ CURSOR を指定します。
cursor-type-name
ユーザー定義のカーソル・タイプの名前を指定します。
row-cast-specification
入力が行の値で、結果がユーザー定義の行タイプである CAST 指定。 row-cast-specification は、row-expression が許可されている場合のみ有効です。
row-expression
row-expression のデータ・タイプは、表またはビューの定義に固定されている行タイプの変数でなければなりません。row-expression のデータ・タイプを、ユーザー定義の行タイプにすることはできません (SQLSTATE 42846)。
NULL
キャスト・オペランドが NULL 値になるように指定します。その結果、 指定したデータ・タイプのすべてのフィールドに NULL 値が入る行ができます。
parameter-marker
キャスト・オペランドはパラメーター・マーカーの一種で、指定された row-type-name に対して置き換えが割り当て可能であることを示す合意と見なされます。
row-type-name
ユーザー定義の行タイプの名前を指定します。row-expression は、row-type-name にキャスト可能でなければなりません (SQLSTATE 42846)。
interval-cast-specification
入力が間隔の文字ストリング表現で、結果が 10 進数の期間である CAST 指定。次のステートメントは等価です。
CAST (string-constant as INTERVAL)
INTERVAL string-constant
使用可能な string-constant 値について詳しくは、INTERVAL スカラー関数を参照してください。
data-type
既存のデータ・タイプの名前。 このタイプ名が修飾されていない場合は、SQL パスを使用してデータ・タイプ解決が行われます。 data-type を指定するとき、長さや精度と位取りのような属性が関連付けられているデータ・タイプは、これらの属性を組み込む必要があります。
  • CHAR のデフォルトの長さは 1 です
  • BINARY は、デフォルトの長さ 1 になります
  • DECIMAL のデフォルトの精度は 5、スケールは 0 です
  • DECFLOAT のデフォルトの精度は 34 です (指定しない場合)
FOR SBCS DATA 節または FOR MIXED DATA 節 (データベースがグラフィック・データ・タイプをサポートするかどうかによって、 1 つだけがサポートされる) を使用して、FOR BIT DATA ストリングをデータベース・コード・ページにキャストできます。 サポートされるデータ・タイプに関する制限は、 指定したキャスト・オペランドに基づいて適用されます。
  • キャスト・オペランドが の場合にサポートされるターゲット・データ・タイプは、キャスト・オペランドのデータ・タイプ (ソース・データ・タイプ) によって異なります。 VARCHAR、VARGRAPHIC、NVARCHAR、または VARBINARY データ・タイプの長さ属性を指定しなかった場合、長さ属性は、最初の引数のデータ・タイプに応じて決まります。このとき、対応する組み込みキャスト関数の、長さ引数が指定されなかった場合の規則が使用されます。
  • キャスト・オペランドがキーワード NULL の場合、既存のどのデータ・タイプでも指定できます。VARCHAR、VARGRAPHIC、NVARCHAR、または VARBINARY データ・タイプの長さ属性を指定しなかった場合、長さ属性として 1 が使用されます。
  • キャスト・オペランドがパラメーター・マーカーの場合、ターゲット・データ・タイプは、既存の任意のデータ・タイプとすることができます。 データ・タイプがユーザー定義特殊タイプの場合、パラメーター・マーカーを使用するアプリケーションは、そのユーザー定義特殊タイプのソース・データ・タイプを使用します。 データ・タイプがユーザー定義構造化タイプの場合、パラメーター・マーカーを使用するアプリケーションは、そのユーザー定義構造化タイプの TO SQL トランスフォーム関数の入力パラメーター・タイプを使用します。VARCHAR、VARGRAPHIC、NVARCHAR、または VARBINARY データ・タイプの長さ属性を指定しなかった場合、長さ属性として 254 が使用されます。
データ・タイプが、データ・タイプ制約を使用して定義されている特殊タイプの場合、そのデータ・タイプ制約が適用され、この制約は真または不明と評価されなければなりません。このように評価されないとエラーが戻されます (SQLSTATE 23528)。
built-in-type
組み込みデータ・タイプの説明については、『CREATE TABLE』を参照してください。
SCOPE
データ・タイプが参照タイプの場合、有効範囲は参照のターゲット表またはターゲット・ビューを識別するように定義することができます。
typed-table-name
型付き表の名前。 表名は既に指定されていなければなりません (SQLSTATE 42704)。 キャストは data-type REF(S) にするものでなければなりません。 ここでの Styped-table-name (SQLSTATE 428DM) のタイプを表しています。
typed-view-name
型付きビューの名前。 そのビューは存在しているか、あるいはビュー定義の一部としてキャストを組み込むように作成されているビューと同じ名前でなければなりません (SQLSTATE 42704)。 キャストは data-type REF(S) にするものでなければなりません。 ここでの Styped-view-name (SQLSTATE 428DM) のタイプを表しています。

数値データを文字データにキャストする場合、結果のデータ・タイプは固定長文字ストリングです。 文字データを数値データにキャストする場合、結果のデータ・タイプは指定した数値のタイプによって異なります。 例えば整数へのキャストの場合、 結果のデータ・タイプは長精度整数になります。

  • アプリケーションが、EMPLOYEE 表の SALARY (decimal(9,2) と定義) の整数部だけを使用するとします。 社員番号や SALARY の整数値を備えた、以下のような照会が考えられます。
       SELECT EMPNO, CAST(SALARY AS INTEGER) FROM EMPLOYEE
  • SMALLINT に基づいて定義された T_AGE という名前の特殊タイプがあり、PERSONNEL 表に AGE 列を作成するために使用されるとします。 さらに INTEGER に基づいて定義された R_YEAR という名前の特殊タイプがあり、PERSONNEL 表に RETIRE_YEAR 列を作成するために使用されるとします。 以下のような更新ステートメントが考えられます。
       UPDATE PERSONNEL SET RETIRE_YEAR =?
         WHERE AGE = CAST( ? AS T_AGE)

    第 1 パラメーターは、データ・タイプ R_YEAR のタイプなしパラメーター・マーカーです。 一方、アプリケーションはこのパラメーター・マーカーの整数部を使用します。この場合、これは割り当てなので、明示的な CAST 指定をする必要はありません。

    2 番目のパラメーター・マーカーは、特殊タイプ T_AGE としてキャストされる型付きパラメーター・マーカーです。これにより、比較は互換データ・タイプとの間でなければならない、という要件が満たされます。アプリケーションは、ソース・データ・タイプ (SMALLINT) を使用してこのパラメーター・マーカーを処理します。

    このステートメントの正常な処理では、SQL パスには、2 つの特殊タイプを定義した 1 つ以上のスキーマのスキーマ名が入っていることを前提としています。

  • アプリケーションは、例えばオーディオ・ストリームのような一つながりの値を提供しますが、その値は SQL ステートメントで使用される前にコード・ページの変換を経由してはなりません。アプリケーションは、次のような CAST を使用することができます。
       CAST( ? AS VARCHAR(10000) FOR BIT DATA)
  • 配列タイプおよび表が以下のように作成されたと想定します。
    
       CREATE TYPE PHONELIST AS DECIMAL(10, 0) ARRAY[5]
    
       CREATE TABLE EMP_PHONES
         (ID          INTEGER,
          PHONENUMBER DECIMAL(10,0) ) 
    以下のプロシージャーは、 ID が 1775 の従業員の電話番号を含む配列を戻します。この従業員に 5 より多い電話番号がある場合、 エラーが戻されます (SQLSTATE 2202F)。
    
       CREATE PROCEDURE GET_PHONES(OUT EPHONES PHONELIST)
       BEGIN
         SELECT CAST(ARRAY_AGG(PHONENUMBER) AS PHONELIST)
         INTO EPHONES
         FROM EMP_PHONES
         WHERE ID = 1775;
       END