連結演算子

連結演算子 (CONCAT または ||) を使用している場合、式の結果はストリングになります。

連結のオペランドのデータ・タイプは、互換の、ストリング、数値、 日付、時刻、またはタイム・スタンプでなければなりません。1 連結のオペランドを特殊タイプにすることはできません。 数値、日付、時刻、 またはタイム・スタンプのオペランドを指定すると、連結前に、等価の文字ストリングにキャスト されます。バイナリー・ストリングは、FOR BIT DATA として定義されていない文字ストリングとは連結できないことに注意してください。

結果のデータ・タイプは、オペランドのデータ・タイプによって決まります。 結果のデータ・タイプは、次の表に要約されています。

表 1. 連結を用いた結果のデータ・タイプ
一方のオペランド列 他方のオペランド 結果列のデータ・タイプ
DBCLOB(x) CHAR(y)* または VARCHAR(y)* または CLOB(y)* または GRAPHIC(y) または VARGRAPHIC(y) または DBCLOB(y) DBCLOB(z) (ただし、z = MIN(x + y, DBCLOB の最大長))
VARGRAPHIC(x) CHAR(y)* または VARCHAR(y)* または GRAPHIC(y) または VARGRAPHIC(y) VARGRAPHIC(z) (ただし、z = MIN(x + y, VARGRAPHIC の最大長))
GRAPHIC(x) CHAR(y)* 混合データ VARGRAPHIC(z) (ただし、z = MIN(x + y, VARGRAPHIC の最大長))
GRAPHIC(x) CHAR(y)* SBCS データまたは GRAPHIC(y) GRAPHIC(z) (ただし、z = MIN(x + y, GRAPHIC の最大長))
CLOB(x)* GRAPHIC(y) または VARGRAPHIC(y) DBCLOB(z) (ただし、z = MIN(x + y, DBCLOB の最大長))
VARCHAR(x)* GRAPHIC(y) VARGRAPHIC(z) (ただし、z = MIN(x + y, VARGRAPHIC の最大長))
CLOB(x) CHAR(y) または VARCHAR(y) または CLOB(y) CLOB(z) (ただし、z = MIN(x + y, CLOB の最大長))
VARCHAR(x) CHAR(y) または VARCHAR(y) VARCHAR(z) (ただし、z = MIN(x + y, VARCHAR の最大長))
CHAR(x) 混合データ CHAR(y) VARCHAR(z) (ただし、z = MIN(x + y, VARCHAR の最大長))
CHAR(x) SBCS データ CHAR(y) CHAR(z) (ただし、z = MIN(x + y, CHAR の最大長))
BLOB(x) BINARY(y) または VARBINARY(y) または BLOB(y) または CHAR(y) FOR BIT DATA または VARCHAR(y) FOR BIT DATA BLOB(z) (ただし、z = MIN(x + y, BLOB の最大長))
VARBINARY(x) BINARY(y) または VARBINARY(y) または CHAR(y) FOR BIT DATA または VARCHAR(y) FOR BIT DATA VARBINARY(z) (ただし、z = MIN(x + y, VARBINARY の最大長)
BINARY(x) VARCHAR(y) FOR BIT DATA VARBINARY(z) (ただし、z = MIN(x + y, VARBINARY の最大長)
BINARY(x) BINARY(y) または CHAR(y) FOR BIT DATA BINARY(z) (ただし、z = MIN(x + y, BINARY の最大長)
注:

* 他方のオペランドが グラフィック・ストリングであり、そのストリングが Unicode である場合は、 文字ストリングのみが許可されます。

表 2. 連結を用いた結果のコード化スキーム
一方のオペランド列 他方のオペランド 結果列のデータ・タイプ
Unicode データ Unicode データまたは DBCS または混合または SBCS データ Unicode データ
DBCS データ DBCS データ DBCS データ
ビット・データ 混合または SBCS またはビット・データ ビット・データ
混合データ 混合または SBCS データ 混合データ
SBCS データ SBCS データ SBCS データ

両方のオペランドの合計長が結果のデータ・タイプの最大長属性を超え る場合は、次のようになります。

  • 結果の長さ属性が結果のデータ・タイプの最大長になります。2
  • ブランクのみが切り捨てられた場合は、警告もエラーも生じません。
  • ブランク以外の文字が切り捨てられた場合は、エラーが起こります。

NULL になる可能性があるオペランドをどちらか一方に使用した場合は、結果も NULL になる可能性があります。また、どちらか一方が NULL ならば、結果は NULL 値になります。 それ以外の場合、結果は、第 1 オペランドのストリングの後に、第 2 オペランドのストリングが続いたストリングになります。

混合データを連結する場合は、その結果の 継ぎ目に 余分なシフト・コードが入ることはありません。したがって、第 1 オペランドのストリングが「シフトイン文字」文字 (X'0F') で終わり、第 2 オペランドの文字ストリングが「シフトアウト」文字 (X'0E') で始まっていても、第 1 オペランドのシフトイン文字と第 2 オペランドのシフトアウト文字 (合わせて 2 バイト) は結果から除去されます。

余分なシフト文字が除去された場合を除いて、オペランドの長さの合計が実 際の結果の長さになります。余分なシフト文字が除去された場合は、実際の 結果の長さは、オペランドの長さの合計よりも 2 だけ小さくなります。

結果の CCSID は、オペランドの CCSID によって決定されます (これについては、ストリングを結合する演算に適用される変換規則で説明しています)。これらの規則による結果として、以下の点に注意してください。

  • ビット・データのオペランドがあれば、結果はビット・データになります。
  • 一方のオペランドが混合データで、もう一方が SBCS データの場合、結果は混合データになります。ただし、このことは、その結果が、形式が正しい混合データであることを必ずしも意味するわけではありません。

ブランクを間に置いて、列 FIRSTNME と列 LASTNAME を連結します。

   FIRSTNME CONCAT ' ' CONCAT LASTNAME
1 縦線文字 (|) を使用すると、リレーショナル・データベース製品間のコードの移植性 が抑制される可能性があります。|| 演算子の代わりに CONCAT 演算子を使用してください。 または、SQL 2003 コア標準への準拠が最も優先される場合は、|| 演算子を使用してください。
2 該当の式が選択リストに含まれている場合は、長さ属性は、最大 レコード・サイズに収まるようにするためにさらに縮小されることがあります。 詳しくは、最大行サイズを参照してください。