値がNULLだった場合は指定した別の値を返す(ifnull関数, coalesce関数)

ifnull 関数を使うと 1 番目の引数の値が NULL だった場合に 2番目の引数の値を返します。 coalesce 関数も同じような目的で利用されます。ここでは SQLite における ifnull 関数および coalesce 関数の使い方について解説します。

(Last modified: )

ifnull関数とcoalesce関数の使い方

ifnull 関数は 1 番目に指定した引数の値が NULL だった場合に 2 番目の引数の値を返します。書式は次の通りです。

ifnull(値1, 値2)

coalesce 関数は 1 番目から n - 1 番目の引数の値の中で最初に NULL でない値を返します。すべて NULL だった場合は最後の n 番目の引数の値を返します。書式は次の通りです。

coalesce(値1, 値2, ..., 値n)

ifnull 関数は coalesce 関数で引数を 2 つにした場合と同じです。

-- --

それでは実際に試してみます。次のようなテーブルを作成しました。

create table user(id integer, name text, handle text);

ifnull関数とcoalesce関数の使い方(1)

INSERT 文を使って次のようなデータを格納してあります。

insert into user values(1, 'Yamada', 'Mars');
insert into user values(2, 'Suzuki', NULL);
insert into user values(3, NULL, 'Octopus');
insert into user values(4, 'Honda', 'Shooter');
insert into user values(5, NULL, NULL);

ifnull関数とcoalesce関数の使い方(2)

それでは ifnull 関数を使って name カラム に格納されている値が NULL 以外だった場合は name カラムの値を返し、 NULL だった場合に 'NoName' を返すようにしてみます。

select id, ifnull(name, 'NoName') from user;

ifnull関数とcoalesce関数の使い方(3)

name カラムに NULL 以外の値が格納されていればその値を取得し、もし NULL だった場合には指定した値を取得することができました。

次に coalesce 関数を使って name カラム に格納されている値が NULL 以外だった場合は name カラムの値を返すのは同じですが、 name カラムの値が NULL だった場合、次に handle カラムを値を調べ、 handle カラムの値が NULL ではない場合は handle カラムの値を、 NULL だった場合は 'NoName' を返すようにしてみます。

select id, coalesce(name, handle, 'NoName') from user;

ifnull関数とcoalesce関数の使い方(4)

name カラム、そして handle カラムの値を調べて最初に NULL でなかった値を取得し、どちらも NULL だった場合には指定した値を取得することができました。

-- --

ifnull 関数および coalesce 関数の使い方について解説しました。

p23-3

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。