概要
値がNULLかどうかを判定して、NULLだった場合別の値を返すようにするには
ifnull()
関数を使う。
ifnull()
はOracleのNVL()
に相当する機能。
構文
ifnull(value1, value2)
- value1
- NULLかどうかを判定する対象。この値がNULLでなければ関数はこの値をそのまま返す。
- value2
- value1がNULLだった場合、この関数はこの値を返す。
実行例1
環境
- Windows 10
- SQLite ver 3.45.1
sqlite> .mode box
sqlite> -- 1.
sqlite> select ifnull(null, 'sample1') as result;
┌─────────┐
│ result │
├─────────┤
│ sample1 │
└─────────┘
sqlite> -- 2.
sqlite> select ifnull(0, 'sample2') as result;
┌────────┐
│ result │
├────────┤
│ 0 │
└────────┘
sqlite> select ifnull('not null', 'sample3') as result;
┌──────────┐
│ result │
├──────────┤
│ not null │
└──────────┘
sqlite> -- 3.
sqlite> .nullvalue [null]
sqlite> select ifnull(null, null) as result;
┌────────┐
│ result │
├────────┤
│ [null] │
└────────┘
- 第一引数がnullだった場合、第二引数の値を返す。
- 第一引数がnullでなければ、第一引数をそのまま返す。
- 第一引数・第二引数ともにnullだった場合、nullを返す。
実行例2
id | last_login | created_at |
---|---|---|
0001 | 2024-02-01 | 2024-01-31 |
0002 | 2024-02-01 | |
0003 | 2024-02-03 |
そのまま出力。
select
id
, last_login
, created_at
from
users
;
id | last_login | created_at |
---|---|---|
0001 | 2024-02-01 | 2024-01-31 |
0002 | 2024-02-01 | |
0003 | 2024-02-03 |
last_login がNULLだった場合、「not logged in」を表示する。
select
id
, ifnull(last_login, 'not logged in') as last_login
from
users
;
id | last_login |
---|---|
0001 | 2024-02-01 |
0002 | not logged in |
0003 | not logged in |
last_login がNULLだった場合、created_at を換わりに取得する。
select
id
, ifnull(last_login, created_at) as last_login
from
users
;
id | last_login |
---|---|
0001 | 2024-02-01 |
0002 | 2024-02-01 |
0003 | 2024-02-03 |
参考URL
-
公式のifnull()に関するドキュメント
https://www.sqlite.org/lang_corefunc.html#ifnull