LoginSignup
0
0

More than 1 year has passed since last update.

OracleDBでNULLを検索する時

Posted at

概要

SQLのIN句に複数カラムを指定する方法とNULLのものも含めて検索することがありました。
具体的には以下のような形

sql
SELECT * FROM table
WHERE (column1, column2) IN (hoge,huga);

上記の形はうまく実行できますが、以下のようにnullが含まれるとうまく動作しません。

sql
SELECT * FROM table
WHERE (column1, column2,column3) IN ('hoge','huga',NULL);

実際に私の場合は値が変数でnullが入ってくる可能性もありました。
value3がnullの場合に何もデータが取得できないという状態でした。

sql
SELECT * FROM table
WHERE (column1, column2, column3) IN (value1,value2,value3);

対応方法

この時ORACLEのNVLという関数を使って対応しました。
NVL関数はNULL(空白として戻される)を文字列に置換して問合せの結果に含めることができます。

NVL(value3, 'NULL');

NVL関数を使うと、value3がnullだった時、文字列のNULLが設定されます。

sql
SELECT * FROM table
WHERE (NVL(column1, 'NULL'),NVL(column2, 'NULL'), NVL(column3, 'NULL')) IN (NVL(value1, 'NULL'),NVL(value2, 'NULL'),NVL(value3, 'NULL'));

これで想定している値が取得できました。

0
0
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
0
0