Ir para conteúdo

Arquivado

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

ThiagoLimah

Função para remover acentos em select

Recommended Posts

Dae pessoal, estou quebrando cabeça a algum tempo para descobrir a melhor forma de fazer uma busca, estou desenvolvendo um sistema para um guia telefônico e preciso fazer a busca pelos contatos, só que se o atendendo informar 'joão', a busca deve retornar todos os cadastrado com 'joão' e 'joao'.

 

Estava pensando em algo como:

 

 SELECT nome FROM clientes WHERE RetiraAcento(nome) LIKE '%joao%';

 

Mas não sei se é possível utilizar uma função desta forma, e caso seja possível, alguém poderia me dar uma luz para criar essa função RetiraAcento()? Pois não sei quase nada de Functions! :(

 

Vi alguns exemplos na internet como este.

 

 CREATE FUNCTION RetiraAcento(Texto VARCHAR(500))
   RETURNS varchar(500) CHARSET utf-8
   DETERMINISTIC
   BEGIN
   declare semAcento varchar(500);
   SELECT lower(Texto) INTO semAcento;
   SELECT REPLACE(semAcento,’ã’,'a’) INTO semAcento;
   SELECT REPLACE(semAcento,’á’,'a’) INTO semAcento;
   SELECT REPLACE(semAcento,’â’,'a’) INTO semAcento;
   SELECT REPLACE(semAcento,’à’,'a’) INTO semAcento;
   SELECT REPLACE(semAcento,’ê’,'e’) INTO semAcento;
   SELECT REPLACE(semAcento,’é’,'e’) INTO semAcento;
   SELECT REPLACE(semAcento,’ë’,'e’) INTO semAcento;
   SELECT REPLACE(semAcento,’ï’,'i’) INTO semAcento;
   SELECT REPLACE(semAcento,’í’,'i’) INTO semAcento;
   SELECT REPLACE(semAcento,’ó’,'o’) INTO semAcento;
   SELECT REPLACE(semAcento,’ô’,'o’) INTO semAcento;
   SELECT REPLACE(semAcento,’ö’,'o’) INTO semAcento;
   SELECT REPLACE(semAcento,’ú’,'u’) INTO semAcento;
   SELECT REPLACE(semAcento,’ü’,'u’) INTO semAcento;
   SELECT REPLACE(semAcento,’ç’,'c’) INTO semAcento;
   SELECT REPLACE(semAcento,’ñ’,'n’) INTO semAcento;
   SELECT upper(SemAcento) INTO semAcento;
   RETURN semAcento;
 END;

 

Se alguém manjar ajuda ae!

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não porque eu não sei se no banco está com acento ou sem! =S

 

Eu precisarei forçar a retirada dos acentos do banco para ter a precisão na busca!

 

Consegui trocando o COLLATE do banco para utf8_general_ci.

Quando faça um select no banco ele ignora os acentos que estão no banco.

 

Ex.: No banco eu tenho um registro: "Made Idéias".

 

Assim ele encontra:

 SELECT nome FROM clientes WHERE nome LIKE '%ideias%';

 

Assim ele não encontra:

 SELECT nome FROM clientes WHERE nome LIKE '%idéias%';

 

Não se isso é o normal, mas caso seja fica mais fácil retirar os acentos na programação para buscar sempre sem acento, já que no banco ele ignora o acento.

 

Valeu a ajuda ae pessoal, e se alguém quiser comentar se o que falei está correto ou não.

 

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho melhor tirar os acentos via programação então, faça isso e realize uns testes pra ver se ficou 100%.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Reli os posts duas vezes porque não entendi o motivo de fazer isso para essa situação.

 

O MySQL tem suporte ao case isensitive.

 

Não bastaria configurar o charset encode para utf8_general_ci ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim,

uma gabirra que eu fiz pra resolver esse problema uma vez foi substituir todo caracter acentuado por % no select

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.