Olá Danilo,
Outra opção é criar uma function sem_acento (listada abaixo) é usar a mesma.
DROP FUNCTION IF EXISTS sem_acento(text);
CREATE OR REPLACE FUNCTION sem_acento(text) RETURNS text AS
$$
SELECT
translate($1,'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC');
$$
LANGUAGE sql VOLATILE;
Exemplo usando a function
SELECT cidade
, uf
FROM municipios
WHERE sem_acento(cidade) ILIKE sem_acento('%são%')
;
SELECT cidade
, uf
FROM municipios
WHERE sem_acento(cidade) ILIKE sem_acento('%sao%')
;
Caso não queira usar a function poderia usar o translate ao invés da
function, não fica muito elegante, mas fica funcional:
Exemplo sem usar function
SELECT cidade
, uf
FROM municipios
WHERE
translate(cidade,'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC')
ILIKE
translate('%sao%','áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC')
;
Existe várias formas...
Espero ter ajudado.
Emerson Hermann
Em 9 de agosto de 2011 10:06, Danilo Silva
<[email protected]> escreveu:
> Tenho uma coluna do tipo texto que contém letras maiúsculas, minúsculas, com
> e sem acentos.
> Existe alguma forma ou função efetuar uma busca desses registros
> independentemente da forma como foi inserido no banco?
> Exemplo, se for digitado SELECT cidade,uf FROM municipios WHERE (cidade LIKE
> '%sao%') ou SELECT cidade,uf FROM municipios WHERE (cidade ILIKE '%sao%')
> essa consulta retornar:
>
> cidade | uf
> ------------------------+----
> São Mateus | ES
> São Mateus do Maranhão | MA
> São Mateus do Sul | PR
> (3 rows)
>
> Retorna campos com e sem acentos, maiúsculos ou minúsculos.
>
>
> Att.
>
> Danilo
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral