【PostgreSQL】Decode関数

PostgreSQL自作関数

説明

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['小','中','大'] ,'該当なし');   --該当なし

 

PostgreSQLの構文まとめを書いています

入門~経験者まで「基本構文・こんな時どう書くんだっけ?」のまとめ