【PostgreSQL】Case文(複数条件分岐、Case When)
説明
SELECT文で条件分岐をするにはCase文を使います。
ここではその構文と使用例を紹介します。
構文
CASE WHEN 条件1 THEN 値1
WHEN 条件2 THEN 値2
WHEN 条件3 THEN 値3
ELSE 値4 END AS 列名 --『AS 列名』は、あってもなくても可です。(ENDまでは必ず必要)
WHEN 条件2 THEN 値2
WHEN 条件3 THEN 値3
ELSE 値4 END AS 列名 --『AS 列名』は、あってもなくても可です。(ENDまでは必ず必要)
『WHEN 条件 THEN 値』をつなげていけばいくつでも条件を設定することができます。
使用例
次の例は「pg_table」のtablenameに対しcase文を使った例になります。
※そのまま実行できるので、コピーで実行し確認してみて下さい。
select
tablename,
case when substring(tablename,5,1)= 'f' then 'a' -- (1)
when substring(tablename,5,1)= 'p' then 'b' -- (2)
else 'c' end as flg -- (3)
from pg_tables
where schemaname != 'pg_catalog' order by tablename;
上の文の意味は、(1)の行で『tableの5文字目が'f'だったら'a'を表示する』、
(2)の行で『tableの5文字目が'p'だったら'b'を表示する』、
(3)の行で『(1)、(2)に合致しなければ'c'を表示する』としています。
またasを使っているので『これらの条件で表示する列名をflgとする』と書いています。