| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/06/2006 15:33:32
|
rodolfodev
JavaBaby
![[Avatar]](/images/avatar/87019fb492fe6f03c3bdb29cf2ffb6eb.jpeg)
Membro desde: 29/03/2006 16:09:17
Mensagens: 92
Offline
|
Estou precisando fazer uma busca no Banco de Dados que me desconsidere acentução.
Exemplo:
Busca pela palavra [solução]. quero que me encontre se estiver [solucao] ou [soluçao].
Alguem tem uma idéia?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/06/2006 16:08:58
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Depende de seu banco. Exemplo:
Oracle 10g - é um recurso novo:
Operations inside an Oracle database are always sensitive to the case and the
accents (diacritics) of the characters. Sometimes you may need to perform case-
insensitive or accent-insensitive comparisons and sorts. You could call functions
LOWER/UPPER to make SQL statements case-insensitive but this can cause
performance degradation. The new case and accent insensitive searching
introduced in Oracle Database 10g is the best of all worlds as it can be applied to
any linguistic sort, it won?t degrade performance and it allows customers to have
the same SQL behaviors without changing existing code. Just like for linguistic
sorts, a function-based index can be built to improve the performance of case-
insensitive searches.
SQL Server - quando você cria o banco ou a tabela (ou instala o servidor em versões mais antigas) você tem a opção de usar busca que depende ou não da acentuação e do "case".
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/06/2006 16:12:21
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Outra forma (que obviamente viola a normalização de bancos de dados) é ter para cada coluna que requer esse tipo de pesquisa uma coluna que está em maiúscula e sem acentos.
NOME
Gisele Bündchen
NOME_NORM
GISELE BUNDCHEN
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/06/2006 17:00:41
|
peczenyj
Moderador
![[Avatar]](/images/avatar/299dc35e747eb77177d9cea10a802da2.jpg)
Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline
|
http://forumweb.com.br/artigos/artigos.php?action=file&id=350
|
http://pacman.blog.br
'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.' |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/06/2006 17:42:55
|
okara
JavaTeenager
Membro desde: 16/05/2005 08:47:08
Mensagens: 152
Offline
|
Se você fizer um assim:
buscar a palavra
solução
select * from busca where palavra in ('solução','soluçao','solucao')
é só montar uma algorítimo para automatizar.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/06/2006 17:45:18
|
rodolfodev
JavaBaby
![[Avatar]](/images/avatar/87019fb492fe6f03c3bdb29cf2ffb6eb.jpeg)
Membro desde: 29/03/2006 16:09:17
Mensagens: 92
Offline
|
Valeu, Estou usando o DB2, o pessoal aki tá querendo usar esse de replica de coluna mas vou dar uma estuda.
Acho que se criar uma funçao que retire acentução com replace pode funcinar mais tenho que ver se não perde muito a performance.
Nova sugestões são sempre bem-vindas.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/06/2006 18:08:49
|
celiomarcos
Entusiasta Java
Membro desde: 09/06/2006 15:21:48
Mensagens: 18
Offline
|
Acho (não tenho certeza) que o SQL do DB2 também deveria permitir o uso de coringas (Wild cards) no LIKE. É utilizado o caractere '%' e o '_'.
Por exemplo:
Existindo estas rows na tabela 'cidadesrs' dbteste:
"GRAMADO"
"GRAVATAÍ"
"OSÓRIO"
SELECT name FROM cidadesrs
WHERE name LIKE 'GRA%'
Retornara:
"GRAMADO"
"GRAVATAÍ"
SELECT name FROM cidadesrs
WHERE name LIKE 'OS_RIO'
Deveria retornar:
"OSÓRIO"
Sendo verdadeiro a possivibilidade de usar os coringas faça uma rotina para alterar os acentos pelo '_'
E diga ae se resolveu teu problema
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/06/2006 18:42:07
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Se a versão do DB2 for muito antiga, não suporta "Collation Order", então não daria para fazer algo parecido com o que é possível com o SQL Server.
Nesse caso é melhor ter a réplica de coluna. (É um porre se for para muitas colunas e muitas tabelas).
Usar "LIKE" pode funcionar com tabelas pequenas mas não com tabelas grandes. (Algumas cláusulas de LIKE, principalmente quando o wildcard está no começo da string, acabam se transformando em um "table scan" - pesadelo de qualquer DBA que se preze).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/06/2006 18:43:58
|
btafarelo
JavaChild
Membro desde: 09/06/2006 18:37:18
Mensagens: 135
Localização: São Paulo
Offline
|
Rodolfo,
Procure na documentação do DB2, como implementar expressões regulares,
com elas vc poderá implmentar isso com muita facilidade.
Exemplo de expressão em java:
import java.util.regex.Pattern;
public class RegExp {
public static void main(String[] args) {
String regExp = "solu[cç][aã]o";
boolean result = Pattern.matches(regExp, "soluçao");
System.out.println(result);
}
}
|
---
Abs,
Bruno Tafarelo |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/06/2006 23:29:21
|
David
JavaEvangelist
![[Avatar]](/images/avatar/77431ca7981f1f1483ae8a58bcbb6e0e.jpg)
Membro desde: 18/03/2005 13:10:33
Mensagens: 450
Localização: Natal/RN
Offline
|
No postgres:
|
David Pereira
Engenheiro de Computação - UFRN
Mestre em Engenharia Elétrica
Doutorando em Engenharia Elétrica |
|
|
 |
|
|