【PostgreSQL】検索文字を後ろから検索する(LastIndexOf)

PostgreSQL自作関数

検索文字を後ろから検索する(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