CREATE OR REPLACE FUNCTION substrb(v_text text, start integer, count integer)
RETURNS character varying AS
$BODY$
DECLARE
ret text default '';
len integer default 0;
len1 integer default 0;
start1 integer default 0;
end1 integer;
cc varchar;
BEGIN
len = COALESCE(length(v_text), 0);
end1 = start + count;
for pos in 0..len-1 loop
if len1 >= start - 1 THEN
exit;
end if;
len1 = len1 + octet_length(SUBSTR (v_text, pos+1, 1));
start1 = start1 +1;
end loop;
for pos in start1..len-1 loop
cc = SUBSTR (v_text, pos+1, 1);
len1 = len1 + octet_length(cc);
if len1 > end1 THEN
exit;
end if;
ret = ret || cc;
end loop;
return ret;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;