SQLite | SQLite関数 | 値がNULLの場合に別の値を返す(ifnull関数、coalesce関数)

ifnull関数は第1引数がNULLの場合に第2引数を返します。coalesce関数も複数の引数に対して同様に動作します。ここでは両方の使い方を説明します。

ifnull関数とcoalesce関数の使い方

ifnull関数は第1引数がNULLの場合に第2引数を返します。

ifnull(値1, 値2)

coalesce関数は、最初のNULLでない引数を返します。先行する引数がすべてNULLの場合は最後の引数を返します。

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

ifnull関数は、引数が2つのcoalesce関数と同じです。

例で使用するテーブルを作成します。

create table user (id integer, name text, address text);
sqlite> create table user (id integer, name text, address text);
sqlite> 

データを追加します。

insert into user values (1, 'devkuma', 'Seoul');
insert into user values (2, 'kimkc', NULL);
insert into user values (3, 'araikuma', 'Busan');
insert into user values (4, NULL, 'Paju');
insert into user values (5, NULL, NULL);
sqlite> insert into user values (1, 'devkuma', 'Seoul');
sqlite> insert into user values (2, 'kimkc', NULL);
sqlite> insert into user values (3, 'araikuma', 'Busan');
sqlite> insert into user values (4, NULL, 'Paju');
sqlite> insert into user values (5, NULL, NULL);
sqlite> 

ifnull関数で、nameNULLでなければその値を、NULLであれば'NoName'を返します。

select id, ifnull(name, 'NoName') from user;
sqlite> .mode column
sqlite> .header on
sqlite> 
sqlite> select id, ifnull(name, 'NoName') from user;
id          ifnull(name, 'NoName')
----------  ----------------------
1           devkuma               
2           kimkc                 
3           araikuma              
4           NoName                
5           NoName                
sqlite> 

nameに値がある行はその値を返し、NULLの行は指定した代替値を返します。

coalesce関数で、nameaddressの順に値を返し、両方がNULLの場合は'NoName'を返します。

select id, coalesce(name, address, 'NoName') from user;
sqlite> select id, coalesce(name, address, 'NoName') from user;
id          coalesce(name, address, 'NoName')
----------  ---------------------------------
1           devkuma                          
2           kimkc                            
3           araikuma                         
4           Paju                             
5           NoName                           
sqlite> 

最初のNULLでない値が返され、両方の列がNULLの場合は指定した代替値が返されます。