12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

ソースコードから寄せ集めた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をマスターするための基本と仕組み

12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?