【PostgreSQL】検索文字を後ろから検索する(LastIndexOf)
検索文字を後ろから検索する(LastIndexOf)
指定した文字列が含まれるかどうかを文字列の最後から検索し、その位置を返す関数です。
引数
引数1(character varying):検索先の文字列(この文字列から引数2の文字を探す)
引数2(character varying):探す文字列
返り値
探す文字列が見つかった位置(○○文字目)
※ なかった場合は0が返る
コード(そのまま実行できます)
CREATE OR REPLACE FUNCTION lastindexof(
c_target_char character varying,
c_search_char character varying)
RETURNS integer AS
$BODY$
declare
c_tmp character varying;
i_result integer;
i_length integer;
BEGIN
--引数1がNullまたは空なら0でリターン
if (c_target_char is null) or (c_target_char= '') then
return 0;
end if;
--引数2がNullまたは空なら0でリターン
if (c_search_char is null) or (c_search_char = '') then
return 0;
end if;
i_length = length(c_target_char);
c_target_char = reverse(c_target_char);
c_search_char = reverse(c_search_char);
c_tmp = substr(c_target_char, 0, length(c_target_char) + 1);
i_result = strpos(c_tmp, c_search_char);
IF i_result != 0 THEN
--見つかった場合:その位置をリターン
RETURN i_length - i_result + 1;
ELSE
--見つからなかった場合:0でリターン
RETURN 0;
END IF;
return 0;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
※PostgreSQL9.5 , 9.6 , 10 , 11 , 12で動作確認済み 自作関数の実行方法はこちら
実行例
--探す文字列があった場合は、最初に見つかった位置が返る
select lastindexOf('abcabcabc', 'b') --【結果】:8
--探す文字列がない場合は、0が返る
select lastindexOf('abcabcabc', 'de') --【結果】:0