2024年3月2日土曜日

SQLite 3 NULLの場合、別の値を返す(ifnull())

概要

値が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] │
└────────┘

                
  1. 第一引数がnullだった場合、第二引数の値を返す。
  2. 第一引数がnullでなければ、第一引数をそのまま返す。
  3. 第一引数・第二引数ともにnullだった場合、nullを返す。

実行例2

users
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