Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
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!
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!
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
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!