É possível descobrir se uma palavra possui acentos usando uma expressão regular.

-- "Tarcísio" possui caracteres diferentes de [a-z 0-9]?
select 'Tarcísio' !~* '^([a-z 0-9])*$'
Retorna verdadeiro. A palavra possui um "i" com acento.

Comecei com uma função usando o translate como foi passado na lista só
que antes de retornar a string, passo pela ER que verifica o
resultado. Se o retorno for "true" gero uma exception.
Descubro manualmente o caracter que causou a falha e assim posso
ajustar a função para transformar este novo caracter.

CREATE OR REPLACE FUNCTION
padroniza(palavra text) RETURNS text AS $_$

DECLARE
  _palavra text;
BEGIN
  _palavra = translate(palavra,
'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ"!...@#$%¨&*()-_=+´`{[^~}]|¹²³£¢¬ªº°<>:?,.;/',
'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC');

  IF _palavra !~* '^([a-z 0-9])*$' THEN
    RAISE EXCEPTION 'a palavra "%" possui caracteres estranhos', _palavra;
  END IF;

  RETURN _palavra;
END;
$_$
LANGUAGE 'plpgsql' IMMUTABLE;

-- 
Tarcisio F. Sassara
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a