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
- FOR SBCS DATA が指定されている場合
- 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 指定が必要です。