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

2020年7月3日

スポンサーリンク

説明

対象の文字列の中に指定した文字列が含まれるかどうかを文字列の最後から検索し、その位置を返します。

 

引数

引数1(character varying):検索先の文字列(この文字列に引数2の文字を探す)

引数2(character varying):探す文字列

 

返り値

探す文字列が見つかった位置(○○バイト)

 

コード

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

	if (c_target_char is null) or (c_target_char= '') then
		return 0;
	end if;

	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
		RETURN 0;
	END IF;

	return 0;

END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION lastindexof(character varying, character varying)
  OWNER TO postgres;

※PostgreSQL12で動作確認済み

 

実行例

select lastindexOf('abcabcabc', 'b') --【結果】:8

 

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

お気に入りに!「こんな時どう書くんだっけ?」の構文・SQLのまとめ