none
Búsqueda ignorando acentos. RRS feed

  • Pregunta

  • Hola amigos del foro: Estoy con VB.Net 2012 y estoy haciendo la siguiente búsqueda:
                       rows = dtCatalogo.Select("Busqueda LIKE '" & strBusca & "%'")

    Si en ese catálogo busco por ejemplo el apellido López, pero en la búsqueda escribí Lopez, no lo encuentra.

    ¿Cómo puedo realizar esta búsqueda sin acentos?

    Grácias por la ayuda.

    jueves, 28 de enero de 2016 18:05

Respuestas

  • hola

    porque aplicas la busqueda sobre el datatable en lugar de hacerla contra la db ?

    que base de datos usas? porque si es Sql Server este permite aplicar el COLLATE

    How to solve accent sensitive problems?

    pero para poder usar el COLLATE deberas realizar el filtro del LIKE contra la db

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Carlos Cuenta lunes, 1 de febrero de 2016 16:02
    jueves, 28 de enero de 2016 19:47
  • Haz caso a Leandro. Yo una vez lo solucioné con

    select * from clientes where replace ( replace ( apellido , ' ,'a' ) , 'é' ,'e' etc,etc) like noseque%'

    se trata de reemplazar las vocales con acento. Ojo con la consulta por que está escrita de memoria 

    • Marcado como respuesta Carlos Cuenta lunes, 1 de febrero de 2016 16:02
    jueves, 28 de enero de 2016 19:58

Todas las respuestas

  • hola

    porque aplicas la busqueda sobre el datatable en lugar de hacerla contra la db ?

    que base de datos usas? porque si es Sql Server este permite aplicar el COLLATE

    How to solve accent sensitive problems?

    pero para poder usar el COLLATE deberas realizar el filtro del LIKE contra la db

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Carlos Cuenta lunes, 1 de febrero de 2016 16:02
    jueves, 28 de enero de 2016 19:47
  • Haz caso a Leandro. Yo una vez lo solucioné con

    select * from clientes where replace ( replace ( apellido , ' ,'a' ) , 'é' ,'e' etc,etc) like noseque%'

    se trata de reemplazar las vocales con acento. Ojo con la consulta por que está escrita de memoria 

    • Marcado como respuesta Carlos Cuenta lunes, 1 de febrero de 2016 16:02
    jueves, 28 de enero de 2016 19:58
  • Como dice Carlos, si la búsqueda la pudieras hacer en el lado servidor, entonces se puede indicar que la haga insensible a acentos aplicando la cláusula "collate". Pero si esto es inviable y necesariamente lo tienes que hacer en lado cliente buscando sobre el DataTable, entonces me temo que el método Select no tiene esa funcionalidad, y tendrás que programar la búsqueda a mano.

    Para ello, escribe un bucle que itere sobre la colección Rows del DataTable comparando una por una la cadena tomada de cada registro. No pienses que el bucle es ineficiente, al fin y al cabo es lo mismo que hace por dentro la instrucción Select.

    Para comparar dos cadenas despreciando los acentos, puedes usar la opción IgnoreCase de String.Compare:

    String.Compare(cadena1, cadena2, CultureInfo.CurrentCulture, CompareOptions.IgnoreCase)

    Para simular el "like algo%", simplemente compara los N primeros caracteres de la cadena (tantos caracteres como sea el Length de "algo"), usando la función SubString para separar esa parte de la cadena antes de compararla.

    jueves, 28 de enero de 2016 20:01
  • "Carlos Cuenta" preguntó:

    > estoy haciendo la siguiente búsqueda:
    >
    >  rows = dtCatalogo.Select("Busqueda LIKE '" & strBusca & "%'")
    >
    > Si en ese catálogo busco por ejemplo el apellido López, pero en la
    > búsqueda escribí Lopez, no lo encuentra.
    >
    > ¿Cómo puedo realizar esta búsqueda sin acentos?

    Hola, Carlos:

    Salvo que hagas la búsqueda manual que te ha indicado Alberto, puedes salir del paso utilizando el operador OR en la expresión del filtro:

    Dim strBusca As String = String.Format("NombreCampo LIKE '{0}%' OR NombreCampo LIKE '{1}%'", "López", "Lopez")
    
    Dim rows As DataRow() = dtCatalogo.Select(strBusca)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    domingo, 31 de enero de 2016 10:33
    Moderador
  • Se me ha ocurrido hacer una combinación de las ayudas que me han dado.

    Gracias a todos.

    lunes, 1 de febrero de 2016 16:04