Foros del Web » Programando para Internet » ASPX (.net) »

Buscador con y sin acentos

Estas en el tema de Buscador con y sin acentos en el foro de ASPX (.net) en Foros del Web. Hola!!! No se como se podra hacer eso, tengo un buscador para el personal de un departamento, y me gustaria que buscara con y sin ...
  #1 (permalink)  
Antiguo 19/02/2007, 09:02
 
Fecha de Ingreso: abril-2005
Ubicación: España - Madrid
Mensajes: 236
Antigüedad: 19 años
Puntos: 2
Buscador con y sin acentos

Hola!!!

No se como se podra hacer eso, tengo un buscador para el personal de un departamento, y me gustaria que buscara con y sin acentos, es decir que si se pone Jose, se muestren aquello que tiene y que no tienen acentos , Jose - José, esto es posible?

Muchas Gracas.
  #2 (permalink)  
Antiguo 19/02/2007, 14:01
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 18 años
Puntos: 2
Información Re: Buscador con y sin acentos

Hola wilwas. Primero tendrías que quitarle los acentos a las pablabras que quieres buscar y luego realizar la búsqueda. Para eso podés usar una función que encontré por ahí:

Código:
private string QuitarAcentos(string texto)
{
	string stFormD = texto.Normalize(NormalizationForm.FormD);
	StringBuilder sb = new StringBuilder();
	for (int ich = 0; ich < stFormD.Length; ich++)
	{
		UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[ich]);
		if (uc != UnicodeCategory.NonSpacingMark)
		{
		sb.Append(stFormD[ich]);
		}
	}
	return sb.ToString();
}
Además de quitar los acentos, esa función también te quita las "ñ". Saludos.
  #3 (permalink)  
Antiguo 20/03/2007, 11:56
 
Fecha de Ingreso: marzo-2007
Mensajes: 59
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Buscador con y sin acentos

En primer lugar, gracias por las posibles respuestas.

Como bien indica Notwen, podemos buscar quitándole los acentos a las palabras, pero supongamos que no hay más remedio que en la base de datos hayan acentos. A mi se me ha ocurrido entonces crear una consulta sql que busque la expresión con acentos OR sin acentos, más o menos:

sql = "SELECT * FROM tabla as tbl WHERE (tbl.nombre LIKE '%" & nombre & "%' OR tbl.nombre LIKE '%" & nombreSinAcentos & "%')

Y me funciona, por ejemplo, si busco "José". En este caso me buscará tanto los "José" como los "Jose".

Pero el problema es en el caso inverso: Si busco "Jose" (sin acentos) no me busca "José" (con acentos).

Pregunta: ¿alguien sabe cómo solucionarlo? ¿o acaso es demasiado descabellado lo que pido? (tal vez sean muchas combinaciones, no sé).

Muchas gracias.
  #4 (permalink)  
Antiguo 22/03/2007, 17:18
Avatar de Thumper  
Fecha de Ingreso: agosto-2004
Ubicación: Jesús María - Lima - Perú
Mensajes: 270
Antigüedad: 19 años, 8 meses
Puntos: 6
Re: Buscador con y sin acentos

Lo puedes hacer de esta manera aunque reconozco q es un poco descabellado y no se q tanto afecto a al performance de tus querys.

Cita:
declare @par varchar(10)
set @par = 'jose'

select *
from xxx
where replace(replace(replace(replace(replace(idn, 'á', 'a'),'é', 'e'), 'í', 'i'), 'ó', 'o') ,'ú', 'u') = replace(replace(replace(replace(replace(@par, 'á', 'a'),'é', 'e'), 'í', 'i'), 'ó', 'o') ,'ú', 'u')
si tienes alguna duda escribeme a [email protected]; si puedo te ayudo con gusto.
__________________
Martín Alexis Valdivia S.
-----------------------------
"Quisiéramos cambiar el mundo, pero Dios no nos daría el código fuente." CAP
"Si Saber No Es Un Derecho, Seguro Será Un Izquierdo." WD
  #5 (permalink)  
Antiguo 23/03/2007, 02:45
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Re: Buscador con y sin acentos

Para esto están las intercalaciones, a nivel de base de datos, de tabla, o hasta de un campo.
Por ejemplo, para el caso de SQL Server (que es con el que he trabajado), un campo puede tener una intercalación XXXXXXXXXX_CI_AI.
CI -> Case Insensitive -> No diferencia entre mayúsculas y minúsculas
AI -> Accent Insensitive -> No diferencia entre letras con accento o letras sin accento.
El caso contrario sería XXXXXXXXX_CS_AS
CS -> Case Sensitive -> Si diferencia entre mayúsculas y minúsculas
AS -> Accent Sensitive -> Si diferencia entre letras con accento o letras sin accento.
En este último caso si que no es lo mismo buscar la palabra con accento que sin accento, ya que entonces si que las diferencia.
La típica opción para búsquedas suele ser CI_AI, ya que suele interesar encontrar los resultados deseados, ya sean con accento o sin accento, así como en mayúsculas como en minúsculas.
Saludos.
__________________
..:: moNTeZIon ::..
  #6 (permalink)  
Antiguo 23/03/2007, 02:50
 
Fecha de Ingreso: abril-2005
Ubicación: España - Madrid
Mensajes: 236
Antigüedad: 19 años
Puntos: 2
Re: Buscador con y sin acentos

La manera que lo consegui al final fue poniendole la clausua :
COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI

De esta manera no hace distincion entre acentos, mayusculas y minusculas

CIao

Última edición por wilwas; 23/03/2007 a las 03:52
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 10:22.