式における結合演算子
2 つのストリング・オペランドを連結すると、式の結果はストリングとなります。
連結のオペランドは、互換性のあるストリングでなければなりません。 バイナリ文字列は文字列と結合できません。FOR BIT DATAとして定義された文字列も含みます(データ型の互換性に関する詳細は、 表1の互換性マトリクスを参照してください)。 ストリング・タイプに基づく特殊タイプは、適切なユーザー定義関数が作成されている場合のみ連結することができます。
CONCAT と縦線 (||) は両方とも、連結演算子を表します。 縦棒(または、一部の国では縦棒の代わりに使用しなければならない文字 1 )は、ある DBMS から別の DBMS に渡されるステートメントの解析エラーの原因となることがあります。 この問題は、ソースとターゲットのCCSIDの特定の組み合わせで文字変換が行われる場合に発生します。 このような理由から、連結演算子としては CONCAT の方が望ましいと言えます。
いずれかのオペランドが NULL 値になる可能性がある場合は、 結果も NULL 値になる可能性があり、いずれかが NULL 値なら結果は NULL 値になります。 そうでない場合、結果は第 1 オペランド・ストリングの後に第 2 オペランド・ストリングが続いた形式となります。
オペランド列が1つある場合、 |
そして、もう一方の
オペランドは |
結果列のデータ・タイプ1 |
|---|---|---|
| CHAR( x ) | CHAR(y) (256 より小さい結合された長さ属性付き) | CHAR( x + y ) 2 倍 |
| CHAR(y) (255 より大きい結合された長さ属性付き) | VARCHAR(MIN( x '+ y ', 32764 )) 3 | |
| VARCHAR( y ) | ||
| VAR CHAR(x) | VARCHAR( y ) | VARCHAR(MIN( x '+ y ', 32764 )) 3 |
| CLOB(x ) | CHAR( y ) | CLOB(MIN( x '+ y ',2G)) |
| VARCHAR( y ) | ||
| CLOB(y ) | ||
| GRAPHIC(y ) | DBCLOB(MIN( x + y,1G)) | |
| VARGRAPHIC( y ) | ||
| DBCL OB (y) | ||
| GRAPHIC(x ) | CHAR( y ) | VARGRAPHIC(MIN( x + y, 16382 )) 4 |
| VARCHAR( y ) | ||
| VARGRAPHIC( y ) | ||
| VARGRAPHIC( x ) | CHAR( y ) | VARGRAPHIC(MIN( x + y, 16382 )) 4 |
| VARCHAR( y ) | ||
| GRAPHIC(y ) | ||
| GRAPHIC(y ) | ||
| DBCL OB (x) | CHAR( y ) | DBCLOB(MIN( x + y,1G)) |
| VARCHAR( y ) | ||
| CLOB(y ) | ||
| GRAPHIC(y ) | ||
| VARGRAPHIC( y ) | ||
| DBCL OB (y) | ||
| BINARY( x ) | BINARY(y) (256 より小さい結合された長さ属性付き) | バイナリ( x + y ) |
| BINARY(y) (255 より大きい結合された長さ属性付き) | VARBINARY(MIN( x + y, 32764 )) | |
| VAR B INARY(x) | VARB IN ARY(y) | VARBINARY(MIN( x + y, 32764 )) |
| BINARY( y ) | ||
| BLOB( x ) | BLOB( y ) | BLOB(MIN( x + y, 2G )) |
注:
|
||
前の表が示しているように、結果の長さは、オペランドの長さの合計になります。 ただし、重複シフト・コード文字が結果から除去される場合には、
結果の長さは 2 バイト少なくなります。 冗長シフト・コード文字は、両方の文字ストリングが EBCDIC 混合データであり、最初のストリングが shift-in
文字 (X'0F') で終わり、2 番目のオペランドが shift-out
文字 (X'0E') で始まる場合に存在します。 これらの 2 つのシフト・コード文字は結果から除去されます。
結果の CCSID は、 セット演算および連結における文字変換のルールによって決定されます。 これらの規則が適用されると、オペランドに応じて次のような結果となります。
- どちらかのオペランドが BIT データの場合、結果は BIT データとなります。
- SBCS データを混合データと比較する際に行われる変換は
、コード化スキームにより異なります。 コード化スキームが Unicode の場合は、SBCS オペランドは MIXED に変換されます。 それ以外の場合、変換は比較を行う Db2 用のインストールパネルDSNTIPFのMIXED DATAフィールドに依存します
- サーバーの MIXED DATA オプションが YES の場合は、混合データ。 結果は、必ずしも正しい形式の混合データではありません。
- SBCS データ (サーバー側の MIXED DATA オプションが NO の場合)。 混合データを純粋な SBCS データに変換できない場合は、エラーが発生します。
オペランドがフィールド・プロシージャーを持つ列に入って いるストリングの場合、演算はデコードされた形式の値に適用されます。 結果は、フィールド・プロシージャーを継承しません。
連結の 1 つのオペランドは、パラメーター・マーカーにすることができます。 1 つのオペランドがパラメーター・マーカーである場合、そのデータ・タイプと 長さ属性は、ストリング・データ・タイプを除き、パラメーター・マーカーではないオペランドと同じと見なされます。 CONCAT 演算子で他のオペランドが文字列データ型である場合の、型なしパラメータマーカーのデータ型長を計算する際に使用される式については、表1 を参照してください。 ネストした連結の場合の属性を決定するには、連結演算の順序を考慮する必要があります。
CREATE FUNCTION ATTACH (TITLE, TITLE_DESCRIPTION)
RETURNS VARCHAR(50) SOURCE CONCAT (VARCHAR(), VARCHAR()) CREATE FUNCTION "||" (TITLE, TITLE_DESCRIPTION)
RETURNS VARCHAR(50) SOURCE CONCAT (VARCHAR(), VARCHAR())