Postgres: Функция для разбора строки


CREATE OR REPLACE FUNCTION core.fx_count_letters(s character varying)
  RETURNS character varying[] AS
$BODY$--
-- Функция считает согласные и гласные буквы
-- а также число переключений в виде кода 010101
--
DECLARE
    s alias for $1;
    i integer;
    c character;
    p character;
    D character varying;
    L integer;
    R integer;
    F integer;
    CONST_L character varying;
    CONST_R character varying;
BEGIN
    CONST_L = 'ai';
    CONST_R = 'bcd';
    D = ''; p = substr(s,1,1);
    L = 0; R = 0;
    IF LENGTH(s)>0 THEN
        FOR i in 1..LENGTH(s) LOOP
          c = substr(s,i,1); F=0;
          IF strpos(CONST_L,c)<>0 THEN
             L = L+1; F=1;
          END IF;
          IF strpos(CONST_R,c)<>0 THEN
             R = R+1; F=1;
          END IF;
          IF F=1 THEN
              IF c<>p THEN
                 D=D || '1';
              ELSE
                 D=D || '0';
              END IF;
          END IF;
          p = c;
        END LOOP;
    END IF;
    RETURN ARRAY[L::varchar,R::varchar,D];

END
--
--
--$BODY$
  LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER
  COST 100;
ALTER FUNCTION core.fx_count_letters(character varying) OWNER TO sk4_admin;
COMMENT ON FUNCTION core.fx_count_letters(character varying) IS 'Получение согласных и гласных букв в имени';