--
-- split/3
--
create or replace function split(
character varying,
character,
integer
) returns varchar as $$
declare
p_string alias for $1;
p_split_char alias for $2;
p_element alias for $3;
v_left_split integer;
v_right_split integer;
v_len integer;
begin
v_len = length(p_string);
if v_len = 0 or p_string is null or p_element <= 0 then
return NULL;
end if;
if p_element = 1 then
v_left_split := 0;
else
v_left_split := instr(p_string, p_split_char, 1, p_element-1);
end if;
v_right_split := instr(p_string, p_split_char, 1, p_element);
if v_right_split = 0 then
v_right_split = v_len + 1;
end if;
if v_left_split = 0 and v_right_split = v_len+1 and p_element <> 1 then
return null;
end if;
return substr(p_string, v_left_split+1, (v_right_split - v_left_split - 1));
end;$$ language plpgsql;