Páginas

quarta-feira, 4 de novembro de 2015

[Oracle] - Função para Remover caracteres especiais em Textos

Bom pessoal, a função abaixo remover caracteres especiais em textos no Oracle, facilitando o tratamento de dados do tipo texto, auxiliando em consultas e criação de índices.

CREATE OR REPLACE FUNCTION NORMALIZAR(str_in VARCHAR2) RETURN VARCHAR2 IS
   pos           NUMBER(10);
   chars_special VARCHAR2(255);
   chars_normal  VARCHAR2(255);
   str           VARCHAR2(255) := UPPER(str_in);
BEGIN
   chars_special := 'ÁÀÃÂÉÊÍÓÔÕÚÜÇ.-';
   chars_normal  := 'AAAAEEIOOOUUC  ';
   str           := TRIM(upper(str));
   pos           := length(chars_normal);
   WHILE pos > 0
   LOOP
      str := REPLACE(str,
                     substr(chars_special, pos, 1),
                     substr(chars_normal, pos, 1));
      pos := pos - 1;
   END LOOP;
   str := TRIM(str);
   WHILE regexp_like(str, ' {2,}')
   LOOP
      str := REPLACE(str, '  ', ' ');
   END LOOP;
   pos := length(str);
   WHILE pos > 0
   LOOP
      IF regexp_like(substr(str, pos, 1), '[^A-Z0-9Ç@._ +-]+')
      THEN
         str := concat(substr(str, 1, pos - 1), substr(str, pos + 1));
      END IF;
      pos := pos - 1;
   END LOOP;
   RETURN str;
END;
/


Um comentário:

  1. melhor função

    function fun_retiraCharEspecial(pString in varchar2) return varchar2 is
    vTextoAux varchar2(2000);
    vResult varchar2(2000);
    begin
    vTextoAux := translate(pString,
    'ÁÇÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕËÜáçéíóúàèìòùâêîôûãõëü',
    'ACEIOUAEIOUAEIOUAOEUaceiouaeiouaeiouaoeu');


    begin
    select translate(vTextoAux, '¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥ÏÎÍÌËÊÉÈÇÆßÒ8<.ÑÐ/-.,^?:;¿', ' ') into vResult from dual;
    exception
    when no_Data_found then
    vResult := vTextoAux;
    when others then
    vResult := vTextoAux;
    end;
    return trim(replace(replace(replace(vResult, chr(10), ''), chr(13), ''), chr(9), ''));


    return vResult;
    end fun_retiraCharEspecial;

    ResponderExcluir