-- -- 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;