CAST の指定

CAST 指定は、data-type によって指定されたタイプにキャストされたキャスト・オペランド (第 1 オペランド) を戻します。

構文図を読む構文図をスキップする
>>-CAST--(--+-expression-------+--AS--data-type--)-------------><
            +-NULL-------------+                     
            '-parameter-marker-'                     

data-type

|--+-built-in-type-+--------------------------------------------|
   +-distinct-type-+   
   '-array-type----'   

構文図を読む構文図をスキップする
built-in-type

|--+-+---SMALLINT---+-------------------------------------------------------------------------------------+--|
   | +-+-INTEGER-+--+                                                                                     |   
   | | '-INT-----'  |                                                                                     |   
   | '---BIGINT-----'                                                                                     |   
   |                  .-(5,0)------------------------.                                                    |   
   +-+-+-DECIMAL-+-+--+------------------------------+----------------------------------------------------+   
   | | '-DEC-----' |  |             .-,0--------.    |                                                    |   
   | '-+-NUMERIC-+-'  '-(--integer--+-----------+--)-'                                                    |   
   |   '-NUM-----'                  '-, integer-'                                                         |   
   |          .-(--53--)------.                                                                           |   
   +-+-FLOAT--+---------------+-+-------------------------------------------------------------------------+   
   | |        '-(--integer--)-' |                                                                         |   
   | +-REAL---------------------+                                                                         |   
   | |         .-PRECISION-.    |                                                                         |   
   | '-DOUBLE--+-----------+----'                                                                         |   
   |             .-(--34--)-.                                                                             |   
   +---DECFLOAT--+----------+-----------------------------------------------------------------------------+   
   |             '-(--16--)-'                                                                             |   
   |                    .-(--1--)-------.                                                                 |   
   +-+-+-+-CHARACTER-+--+---------------+----------+--+----------------+---------------------+------------+   
   | | | '-CHAR------'  '-(--integer--)-'          |  +-FOR BIT DATA---+                     |            |   
   | | '-+-+-CHARACTER-+--VARYING-+--(--integer--)-'  +-FOR SBCS DATA--+                     |            |   
   | |   | '-CHAR------'          |                   +-FOR MIXED DATA-+                     |            |   
   | |   '-VARCHAR----------------'                   '-ccsid-clause---'                     |            |   
   | |                                          .-(--1M--)-------------.                     |            |   
   | '-----+-+-CHARACTER-+--LARGE OBJECT-+------+----------------------+--+----------------+-'            |   
   |       | '-CHAR------'               |      '-(--integer--+---+--)-'  +-FOR SBCS DATA--+              |   
   |       '-CLOB------------------------'                    +-K-+       +-FOR MIXED DATA-+              |   
   |                                                          +-M-+       '-ccsid-clause---'              |   
   |                                                          '-G-'                                       |   
   |                .-(--1--)-------.                                                                     |   
   +-+---GRAPHIC----+---------------+-------+--+--------------+-------------------------------------------+   
   | |              '-(--integer--)-'       |  '-ccsid-clause-'                                           |   
   | +-+-GRAPHIC VARYING-+--(--integer--)---+                                                             |   
   | | '-VARGRAPHIC------'                  |                                                             |   
   | |             .-(--1M--)-------------. |                                                             |   
   | '---DBCLOB----+----------------------+-'                                                             |   
   |               '-(--integer--+---+--)-'                                                               |   
   |                             +-K-+                                                                    |   
   |                             +-M-+                                                                    |   
   |                             '-G-'                                                                    |   
   |                             .-(--1--)-------.                                                        |   
   +-+-+-+-NATIONAL CHARACTER-+--+---------------+----------+---------------------+--+------------------+-+   
   | | | +-NATIONAL CHAR------+  '-(--integer--)-'          |                     |  '-normalize-clause-' |   
   | | | '-NCHAR--------------'                             |                     |                       |   
   | | '-+-+-NATIONAL CHARACTER-+--VARYING-+--(--integer--)-'                     |                       |   
   | |   | +-NATIONAL CHAR------+          |                                      |                       |   
   | |   | '-NCHAR--------------'          |                                      |                       |   
   | |   '-NVARCHAR------------------------'                                      |                       |   
   | |                                                   .-(--1M--)-------------. |                       |   
   | '-----+-+-NATIONAL CHARACTER-+--LARGE OBJECT-+------+----------------------+-'                       |   
   |       | '-NCHAR--------------'               |      '-(--integer--+---+--)-'                         |   
   |       '-NCLOB--------------------------------'                    +-K-+                              |   
   |                                                                   +-M-+                              |   
   |                                                                   '-G-'                              |   
   |             .-(--1--)-------.                                                                        |   
   +-+-+-BINARY--+---------------+---------+-----------------+--------------------------------------------+   
   | | |         '-(--integer--)-'         |                 |                                            |   
   | | '-+-BINARY VARYING-+--(--integer--)-'                 |                                            |   
   | |   '-VARBINARY------'                                  |                                            |   
   | |                              .-(--1M--)-------------. |                                            |   
   | '---+-BLOB----------------+----+----------------------+-'                                            |   
   |     '-BINARY LARGE OBJECT-'    '-(--integer--+---+--)-'                                              |   
   |                                              +-K-+                                                   |   
   |                                              +-M-+                                                   |   
   |                                              '-G-'                                                   |   
   +-+-DATE-------------------------+---------------------------------------------------------------------+   
   | |       .-(--0--)-.            |                                                                     |   
   | +-TIME--+---------+------------+                                                                     |   
   | |            .-(--6--)-------. |                                                                     |   
   | '-TIMESTAMP--+---------------+-'                                                                     |   
   |              '-(--integer--)-'                                                                       |   
   |               .-(--200--)-----.                                                                      |   
   +-----DATALINK--+---------------+--+--------------+----------------------------------------------------+   
   |               '-(--integer--)-'  '-ccsid-clause-'                                                    |   
   +---ROWID----------------------------------------------------------------------------------------------+   
   '---XML--+--------------+------------------------------------------------------------------------------'   
            '-ccsid-clause-'                                                                                  

構文図を読む構文図をスキップする
ccsid-clause

|--CCSID--integer--+------------------+-------------------------|
                   '-normalize-clause-'   

normalize-clause

   .-NOT NORMALIZED-.   
|--+-NORMALIZED-----+-------------------------------------------|

CAST 指定は、data-type によって指定されたタイプにキャストされたキャスト・オペランド (第 1 オペランド) を戻します。 いずれかのオペランドのデータ・タイプが特殊タイプの場合は、ステートメントの権限 ID によって保持される特権には、特殊タイプの USAGE 権限が含まれている必要があります。

expression
キャスト・オペランドが、NULL でもパラメーター・マーカーでもない式であることを指定します。 結果は指定したターゲット・データ・タイプに変換される引数値です。

サポートされているキャストについては、データ・タイプ間のキャスト に示されています。 そこでは、最初の列がキャスト・オペランドのデータ・タイプ (ソース・データ・タイプ) を、 そして上段のデータ・タイプが CAST 指定のターゲット・データ・タイプを表しています。 キャストがサポートされていない場合は、エラーが戻されます。

文字またはグラフィック・ストリングを、長さが異なる文字またはグラフィック・ストリングにキャストすると、末尾ブランク以外の切り捨てが生じた場合には、警告が戻されます。

NULL
キャスト・オペランドが NULL 値であることを指定します。 結果は、指定されたデータ・タイプ を持つ NULL 値です。
parameter-marker
パラメーター・マーカー (疑問符として指定) は、一般には式であると考えられますが、特別な意味を持つのでこのケースは別に記しています。 キャスト・オペランドがパラメーター・マーカー の場合、指定したデータ・タイプ は、 置き換えが指定したデータ・タイプ に割り当て可能であることの保証であると考えられます (記憶域割り当ての規則を使用します。割り当ておよび比較を参照)。 そのようなパラメーター・マーカーを、型付きパラメーター・マーカー と言います。 タイプ・パラメーター・マーカーは、選択リストの DESCRIBE または列の割り当てのために、他のタイプ値と同様に取り扱われることになります。
data-type
結果のデータ・タイプを指定します。 データ・タイプが修飾されていない場合は、適切なデータ・タイプを見つけるために SQL パスを使用します。 詳しくは、非修飾の関数、プロシージャー、特定名、タイプ、および変数を参照してください。 data-type の説明は、CREATE TABLEを参照してください。(オペレーティング・システム間の移植性のために、浮動小数点データ・タイプを使用する場合は、FLOAT の代わりに REAL または DOUBLE を使用してください。)

サポートされるデータ・タイプに関する制限は、指定されたキャスト のオペランドに基づきます。

  • キャストのオペランドが の場合、キャストのオペランドのデータ・タイプに基づいてサポートされているターゲット・データ・タイプに関しては、表 2 を参照してください。
  • キャストのオペランドがキーワード NULL の場合は、ターゲット・データ・タイプはどのデータ・タイプでも構いません。
  • キャストのオペランドがパラメーター・マーカーの場合は、ターゲット・データ・タイプはどのデータ・タイプでも構いません。 データ・タイプが特殊タイプの場合、パラメーター・マーカーを使用するアプリケーションは、特殊タイプのソース・データ・タイプを使用することになります。データ・タイプが配列タイプの場合は、パラメーター・マーカーを使用して、ターゲットの配列データ・タイプの最大カーディナリティー以下のカーディナリティーで配列を記述する必要があります。パラメーター・マーカーのデータ・タイプは、ターゲットの配列データ・タイプのデータ・タイプと完全に一致していなければなりません。

CCSID 属性が指定されていない場合は、次のようになります。

  • データ・タイプ が BINARY、VARBINARY、または BLOB の場合、 65535 の CCSID が使用されます。
  • FOR BIT DATA が指定された場合、65535 の CCSID が使用されます。
  • が文字ストリングで、データ・タイプ が CHAR、VARCHAR、または CLOB の場合は、次のようになります。
    • FOR SBCS DATA が指定されている場合
      • expression の CCSID が Unicode CCSID の場合は、ジョブのデフォルト CCSID に関連した 1 バイト CCSID が使用されます。
      • それ以外の場合は、expression の CCSID に関連した 1 バイト CCSID が使用されます。1
    • FOR MIXED DATA が指定されている場合
      • expression の CCSID が Unicode CCSID の場合は、ジョブのデフォルト CCSID に関連した混合バイト CCSID が使用されます。
      • それ以外の場合は、 の CCSID に関連した混合バイト CCSID が使用されます。1
    • それ以外の場合は、expression のデフォルト CCSID が使用されます。21
  • expression がグラフィック・ストリングの場合や、expression がパラメーター・マーカーの場合に、data-type が CHAR、VARCHAR、CLOB のいずれかであれば、以下のようになります。
    • FOR SBCS DATA が指定された場合、ジョブのデフォルト CCSID に関連した単一バイト CCSID が使用されます。
    • FOR MIXED DATA が指定された場合、ジョブのデフォルト CCSID に関連した混合バイト CCSID が使用されます。
    • それ以外の場合は、ジョブのデフォルト CCSID が使用されます。
  • expression が文字ストリングまたはパラメーター・マーカーで、data-type が GRAPHIC、VARGRAPHIC、DBCLOB、DATE、TIME、または TIMESTAMP の場合、CCSID 1200 が使用されます。
  • がグラフィック・ストリングで、データ・タイプ が GRAPHIC、VARGRAPHIC、または DBCLOB の場合、 の CCSID が使用されます。
  • data-type が XML であれば、SQL_XML_DATA_CCSID QAQQINI 設定で指定されている CCSID 値が使用されます。詳しくは、XML 値を参照してください。
  • それ以外の場合は、ジョブのデフォルト CCSID が使用されます。

CCSID 属性が指定された場合、データはその CCSID に変換されます。 NORMALIZED が指定された場合、データは正規化されます。

データ・タイプ間でサポートされるキャスト、およびデータ・タイプへキャストする際の規則についての詳細は、データ・タイプ間のキャストを参照してください。

  • アプリケーションでは、EMPLOYEE 表の SALARY 列 (DECIMAL(9,2) として定義) の整数部分にのみ関与します。 次の CAST 指定は、SALARY 列を INTEGER に変換します。
    SELECT EMPNO, CAST(SALARY AS INTEGER)
      FROM EMPLOYEE 
  • 2 つの特殊タイプが存在するものとします。 T_AGE は、SMALLINT をソースとしており、PERSONNEL 表の AGE 列のデータ・タイプです。 R_YEAR は、INTEGER をソースとしており、同じ表の RETIRE_YEAR 列のデータ・タイプです。 次の UPDATE ステートメントを用意しました。
    UPDATE PERSONNEL SET RETIRE_YEAR = ?
      WHERE AGE = CAST( ? AS T_AGE ) 

    最初のパラメーターはタイプなしパラメーター・マーカーで、 そのデータ・タイプは R_YEAR になります。 この場合、パラメーター・マーカー値が特殊タイプに割り当てられるので、 明示的な CAST 指定は必要ありません。

    2 番目のパラメーター・マーカーは型付きパラメーター・マーカーで、 それは特殊タイプ T_AGE にキャストされます。 この場合、パラメーター・マーカー値が特殊タイプと比較されるので、明示的な CAST 指定が必要です。

1 XSLTRANSFORM の場合は、expression の CCSID が 65535 であれば、ジョブのデフォルト CCSID が使用されます。
2 expression の CCSID が 65535 であれば、CLOB にキャストすることはできません。