Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

M. Simão

Pesquisa ignorando acentos no Postgres

Recommended Posts

Oi pessoal,

 

Apesar do Postgres ser um banco de dados robusto, me deparei com essa questão relativamente simples mas que não estou encontrando uma solução confiável para ela.

 

Alguém conhece uma maneira de fazer buscas no Postgres com ele ignorando acentos e senso case-insensitive?

 

Pesquisando no Google, encontrei essa sugestão:

 

SELECT nome from cliente where to_ascii(nome,'LATIN1') ilike '%nome%';

 

Fiz um teste para o nome "João Silva" que está cadastrado dessa forma no banco dados.

 

Pesquisando assim funciona:

 

SELECT nome from cliente where to_ascii(nome,'LATIN1') ilike '%joa%';

 

Mas se eu pesquisar assim, o nome não é localizado:

 

SELECT nome from cliente where to_ascii(nome,'LATIN1') ilike '%joao%';

 

Meu banco de dados está codificado em UTF8. Qualquer dica será muito bem vinda!

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae amigo beleza?

 

Faça assim:

SELECT nome FROM cliente WHERE to_ascii(nome) ILIKE to_ascii('%joao%');

 

 

abraço!

 

Oi pessoal,

 

Apesar do Postgres ser um banco de dados robusto, me deparei com essa questão relativamente simples mas que não estou encontrando uma solução confiável para ela.

 

Alguém conhece uma maneira de fazer buscas no Postgres com ele ignorando acentos e senso case-insensitive?

 

Pesquisando no Google, encontrei essa sugestão:

 

SELECT nome from cliente where to_ascii(nome,'LATIN1') ilike '%nome%';

 

Fiz um teste para o nome "João Silva" que está cadastrado dessa forma no banco dados.

 

Pesquisando assim funciona:

 

SELECT nome from cliente where to_ascii(nome,'LATIN1') ilike '%joa%';

 

Mas se eu pesquisar assim, o nome não é localizado:

 

SELECT nome from cliente where to_ascii(nome,'LATIN1') ilike '%joao%';

 

Meu banco de dados está codificado em UTF8. Qualquer dica será muito bem vinda!

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Fernando,

 

Valeu pela dica, mas tentei rodar no PostgreSQL 8.1.22 e ele retornou o seguinte:

 

Erro de SQL:

ERROR: encoding conversion from UTF8 to ASCII not supported

Indicação de entrada :

SELECT nome FROM cliente WHERE to_ascii(nome) ILIKE to_ascii('%joao%');

 

 

Ae amigo beleza?

 

Faça assim:

SELECT nome FROM cliente WHERE to_ascii(nome) ILIKE to_ascii('%joao%');

 

 

abraço!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummm, que coisa,

 

aqui na empresa utilizamos o banco postgres com codificação LATIN1 e funciona.

 

Vou ver e qualquer coisa lhe aviso.

 

abraço!

 

Oi Fernando,

 

Valeu pela dica, mas tentei rodar no PostgreSQL 8.1.22 e ele retornou o seguinte:

 

Erro de SQL:

ERROR: encoding conversion from UTF8 to ASCII not supported

Indicação de entrada :

SELECT nome FROM cliente WHERE to_ascii(nome) ILIKE to_ascii('%joao%');

 

 

Ae amigo beleza?

 

Faça assim:

SELECT nome FROM cliente WHERE to_ascii(nome) ILIKE to_ascii('%joao%');

 

 

abraço!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use isso

 

CREATE OR REPLACE FUNCTION remove_acento(text)

RETURNS text AS

$BODY$

SELECT TRANSLATE($1,'áàãâäÁÀÃÂÄéèêëÉÈÊËíìîïÍÌÎÏóòõôöÓÒÕÔÖúùûüÚÙÛÜñÑçÇÿýÝ','aaaaaAAAAAeeeeEEEEiiiiIIIIoooooOOOOOuuuuUUUUnNcCyyY')

$BODY$

LANGUAGE sql IMMUTABLE STRICT

COST 100;

ALTER FUNCTION remove_acento(text)

OWNER TO postgres;

COMMENT ON FUNCTION remove_acento(text) IS 'Remove letras com acentuação';

 

--- use assim

 

select remove_acento('palavra');

 

 

para colocar tudo no mesmo formato use a funcao upper nativa do postgres

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.