--
-- instr/2
--
create or replace function instr(
character varying,
character
) returns int4 as $$
declare
str alias for $1;
pat alias for $2;
begin
return instr(str,pat,1,1);
end;$$ language plpgsql;
--
-- instr/3
--
create or replace function instr(
character varying,
character,
integer
) returns int4 as $$
declare
str alias for $1;
pat alias for $2;
dir alias for $3;
begin
return instr(str,pat,dir,1);
end;$$ language plpgsql;
--
-- instr/4
--
create or replace function instr(
character varying,
character,
integer,
integer
) returns int4 as $$
declare
str alias for $1;
pat alias for $2;
dir alias for $3;
cnt alias for $4;
v_len integer;
v_i integer;
v_c char;
v_cnt integer;
v_inc integer;
begin
v_len := length(str);
v_cnt := 0;
if dir < 0 then
v_inc := -1;
v_i := v_len;
else
v_inc := 1;
v_i := 1;
end if;
while v_i > 0 and v_i <= v_len LOOP
v_c := substr(str,v_i,1);
if v_c::char = pat::char then
v_cnt := v_cnt + 1;
if v_cnt = cnt then
return v_i;
end if;
end if;
v_i := v_i + v_inc;
end loop;
return 0;
end;$$ language plpgsql;