COALESCE スカラー関数

COALESCE 関数は、最初の非 NULL 式の値を戻します。

構文図を読むビジュアルシンタックスダイアグラムをスキップするCOALESCE( 式, 式)

スキーマは SYSIBM です。

引数同士の間に互換性がなければなりません。 互換性に関する詳細については、 表1の互換性マトリックスを参照してください。 引数は、組み込みデータ・タイプまたはユーザー定義のデータ・タイプのどちらかにすることができます。

引数は指定された順序で評価され、 関数の結果は NULL 値以外の最初の引数になります。 すべての引数が NULL にすることができる引数の場合に限り、結果も NULL にできます。 すべての引数が NULL の場合に限り、結果は NULL となります。

選択された引数は、必要に応じて結果の属性に変換されます。 結果の属性は、 結果データ型のルールを使用して決定されます。 COALESCE 関数に 3 つ以上の引数がある場合は、最初の 2 つの引数に 規則を適用して、結果タイプの候補を決定します。 そのあと、この規則はその結果タイプの候補および 3 番目の引数にも 適用されて、他の結果タイプの候補を決定します。 このプロセスは、 すべての引数が分析されて、最終的な結果タイプが決定されるまで、続けられます。

文字ストリングまたはグラフィック・ストリングと数値の引数が混在している場合、ストリング値は暗黙的に DECFLOAT(34) 値にキャストされます。

COALESCE 関数は CASE 式が提供する関数のサブセットも処理することができます。 COALESCE(e1,e2) を使用した結果は、以下の式を使用した場合と同じです。
   CASE WHEN e1 IS NOT NULL THEN e1 ELSE e2 END

VALUE は COALESCE のシノニムとして指定できます。

例 1: SCORE1 および SCORE2 が 表 GRADES の SMALLINT 列であり、SCORE1 には NULL 値を使用できるが、SCORE2 には使用できないものとします。 SCORE1 が null の場合に SCORE1 の値が 0 であると想定して、SCORE1 + SCORE2 > 100 の GRADES 内のすべての行を選択します。
   SELECT * FROM GRADES
     WHERE COALESCE(SCORE1,0) + SCORE2 > 100;
例 2: DSN8C10.EMP という名前のテーブルに HIREDATE という名前の DATE 列が含まれており、この列には NULL が許可されているとします。 以下のクエリは、HIREDATEの日付が不明(null)であるか、1960年1月1日より前の日付であるDSN8C10.EMPのすべての行を選択します。
   SELECT * FROM DSN8C10.EMP
     WHERE COALESCE(HIREDATE,DATE('1959-12-31')) < '1960-01-01';

述部は COALESCE(HIREDATE,'1959-12-31') とコーディングすることも できます。比較の目的では、日付のストリング表現と日付を比較することが可能であるからです。

例 3: 1993 年および 1994 年 に関して、各部門の売上を記録した表があるとします。 S1993 と S1994 の各表は、DEPTNO 列と SALES 列で構成されて います。そのどちらも NULL 値とすることはできません。 以下のように照会すると、両方の年の売上情報を取得することができます。
   SELECT COALESCE(S1993.DEPTNO,S1994.DEPTNO) AS DEPT, S1993.SALES, S1994.SALES
     FROM S1993 FULL JOIN S1994 ON S1993.DEPTNO = S1994.DEPTNO
     ORDER BY DEPT;

全外部結合により、売上の有無または両方の年に部門が存在 していたかどうかにかかわらず、結果にすべての部門を含めることができるようになります。 COALESCE 関数によって、2 つの結合列を 1 つ の列に結合することができます。そのようにすると、結果を順番 に並べることができます。