|
 |
|
|
IF文のような条件式を使う(CASE WHEN〜、DECODE) |
|
スポンサード リンク
SQLの中でIF文のような条件式を使うなら、CASE WHEN 〜 または DECODE関数を使用します
CASE 式
WHEN 条件1 THEN 値1
WHEN 条件2 THEN 値2
・
・
・
WHEN 条件n THEN 値n
ELSE デフォルト値 END |
式が条件1に一致(TRUEと評価)したら値1を戻し、条件1に一致せず条件2に一致したら値2を戻し、このように式と条件が一致する最初の値が戻されます。
どの条件とも一致しなかった場合は、ELSE句に指定したデフォルト値を戻します。
ただし、ELSE句(デフォルト値)は省略可能で、省略されたときはNULL値が戻されます。 |
DECODE(列名 | 式 ,
条件1,値1,
条件2,値2,…・ ,
{デフォルト値} ) |
CASE式とDECODE関数の違い
CASE式では、WHEN句でEXISTSや比較条件やINやBETWEENやLIKEなどの演算子が使用可能だが、DECODE関数では使用不可能
DECODE関数では、DECODE は NULL = NULL の評価は True となるが、CASE式ではNULLとなるCASE式でNULLを評価する場合は、WHEN句でIS
NULLを使う。
。
例1) 列「sex」が'1'の場合、'男'、'2'の場合、'女'、その他の場合、'不明'と表示する。
|
select lastname,
case sex
when '1' then '男'
when '2' then '女'
else '不明'
end
from employees |
スポンサード リンク
例2) 例1と同じことをDECODE関数で表す。
|
select lastname,
decode(sex,'1','男','2','女','不明')
from employees
|
例3) 列「lastname」がNULLの場合、'名前未登録'、その他の場合、'名前登録済み'と表示する(NULLの評価)
|
select
case
when lastname is null then '名前未登録'
else '名前登録済み'
end
from employees |
CASE式でNULLを評価する場合、WHEN句でIS NULL演算子を使用する
例4) 例3と同じことをDECODE関数で表す。
|
select
decode(lastname,null,'名前未登録','名前登録済み')
from employees
|
DECODE関数ではNULLを評価する場合、直接指定できる。
例5) 列「salary」が1000以下の場合、'少ない'、2000以下の場合、'普通'、3000以上の場合、'多い'、と表示する。
|
select lastname,
case
when salary <= 1000 then '少ない'
when salary <= 2000 then '普通'
when salary >= 3000 then '多い'
else '不明'
end
from employees |
DECODE関数では、比較条件や演算子は使用できない。
スポンサード リンク
|
|
|
|
|
|
|