Oracle null判定の方法をいくつか

  • 1
    いいね
  • 0
    コメント

ソースコードから寄せ集めたSQLが同じnull判定をいろんなパターンで行っていて、面白かったのでメモ

下記のコード(パターン4以外)は、col_name の値が null であれば 0null 以外であれば 1 を返却している。
Oracle 11gにて検証

パターン1: NVL2関数 を使う

SELECT
  NVL2(col_name, 1, 0)  AS null_flg
FROM
  table_name

NVL2 ( expr1 , expr2 , expr3 )
戻り値:
 式 expr1 が NULL 以外なら 式 expr2 の値(expr1 の型)
 式 expr1 が NULL なら 式 expr3 の値(expr3 の型)
NVL2、NULLIF - オラクル・Oracle SQL 関数リファレンス

パターン2: DECODE関数 を使う

SELECT
  DECODE(col_name, NULL, 0, 1) AS null_flg
FROM
  table_name

パターン3: 検索CASE式 を使う

SELECT
  CASE 
    WHEN col_name IS NULL THEN 0 
    ELSE 1 
  END AS null_flg
FROM
  table_name

パターン4: 単純CASE式 を使う(と、できないので注意!)

SELECT
  CASE col_name 
    WHEN NULL THEN 0 
    ELSE 1 
  END AS null_flg
FROM
  table_name

これは col_nameNULL であっても、1 が返却されるため、間違ったパターン。
理由については以下を参照 ↓

単純 CASE 式は NULL との評価はすべて NULL になる。
CASE と DECODE 関数の違い - オラクル・Oracleをマスターするための基本と仕組み