Oracle Databaseでは、COALESCE()
関数は、最初のnull以外の式を式リストに返します。
構文
構文は次のようになります:
COALESCE(expr [, expr ]...)
少なくとも2つの式を渡す必要があります。
例
デモンストレーションの例を次に示します。
SELECT COALESCE(null, 7)
FROM DUAL;
結果:
7
その他の例を次に示します。
SET NULL 'null';
SELECT
COALESCE(null, null, 1, 2, 3) AS "r1",
COALESCE(1, null, 2, 3) AS "r2",
COALESCE(null, 3, 2, 1) AS "r3",
COALESCE(1, 2, 3, null) AS "r4",
COALESCE(null, null) AS "r5"
FROM DUAL;
結果:
r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null
COALESCE()
であることがわかります null
を返します すべての引数がnullの場合。
最初の行についてSET NULL 'null';
、SQLclセッションがnull
を返すように追加しました 結果がnullの場合は常に。
デフォルトでは、SQLclおよびSQL * Plusは、null
の場合は常に空白を返します。 SQL SELECT
の結果として発生します 声明。
ただし、SET NULL
は使用できます 返される別の文字列を指定します。ここでは、文字列null
を指定しました 返却する必要があります。
データベースの例
次のクエリを実行するとします。
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
結果:
LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Tokyo Prefecture 1300 null 1400 Texas 1500 California
いくつかの行がnull
であることがわかります STATE_PROVINCE
内 列。
今回もCOALESCE()
を使用する以外は、クエリを繰り返します。 STATE_PROVINCE
に対して 列:
SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
結果:
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A') ______________ _________________________________ 1000 N/A 1100 N/A 1200 Tokyo Prefecture 1300 N/A 1400 Texas 1500 California
そこで、COALESCE()
を使用しました N/A
を返す null値が発生したときはいつでも。
COALESCE()
vs CASE
次のとおりです:
COALESCE(expr1, expr2)
これと同等です:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
無効な引数カウント
引数を渡さずに関数を呼び出すと、エラーが発生します:
SELECT COALESCE()
FROM DUAL;
結果:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"