【PostgreSQL】Decode関数
説明
OracleのDecode関数まがいのものです。
条件に合致した場合は指定した値が返ります。合致しない場合、最後の引数の値が返ります。
引数
引数1(character varying):チェックする値
引数2(character varying[]):条件値(配列)
引数3(character varying[]):条件値に一致する場合の返り値(配列)
引数4(character varying):条件に一致しない場合の返り値
返り値
引数3の値、(合致しない場合)引数4の値
コード
CREATE OR REPLACE FUNCTION public.decode(
c_target character varying,
a_conditions character varying[],
a_return character varying[],
c_else_return character varying)
RETURNS character varying
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
declare
/*
引数1:チェックする値
引数2:条件値
引数3:条件値に一致する場合の返り値
引数4:条件に一致しない場合の返り値
*/
BEGIN
--配列の分だけループ
for i in 1..array_length(a_conditions,1) loop
if c_target = a_conditions[i] then
return a_return[i];
end if;
end loop;
--条件に一致しない時、4つめの引数でリターン
return c_else_return;
END;
$BODY$;
ALTER FUNCTION public.decode(character varying, character varying[], character varying[], character varying)
OWNER TO postgres;
実行例
select decode('S' , array['S','M','L'] , array['小','中','大'] ,'該当なし'); --小
select decode('M' , array['S','M','L'] , array['小','中','大'] ,'該当なし'); --中
select decode('L' , array['S','M','L'] , array['小','中','大'] ,'該当なし'); --大
select decode('XL' , array['S','M','L'] , array['小','中','大'] ,'該当なし'); --該当なし