Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

sqlite3 ignorar acentos en una consulta select

Estas en el tema de sqlite3 ignorar acentos en una consulta select en el foro de Bases de Datos General en Foros del Web. Buen día, Actualmente estoy trabajando con sqlite3 y lenguaje C sobre linux, pero me eh encontrado con un problema al hacer una consulta, sqlite3 distingue ...
  #1 (permalink)  
Antiguo 23/11/2010, 10:34
 
Fecha de Ingreso: junio-2003
Mensajes: 19
Antigüedad: 21 años, 4 meses
Puntos: 0
sqlite3 ignorar acentos en una consulta select

Buen día,

Actualmente estoy trabajando con sqlite3 y lenguaje C sobre linux, pero me eh encontrado con un problema al hacer una consulta, sqlite3 distingue la palabra con acentos o sin ellos. Al hacer un select, el resultado es diferente para "arbol" que "árbol", hay alguna forma de hacer que la consulta no distinga los acentos.

De ante mano muchas gracias por la orientación.
Angel Guerrero
  #2 (permalink)  
Antiguo 23/11/2010, 12:20
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: sqlite3 ignorar acentos en una consulta select

Buenos días GUSANGEL.GEO:

Nunca he trabajado con SQLite3, pero te comento cómo se puede hacer en SQL Server, sería cuestión de que investigues si se puede aplicar en tu caso. El truco está en el collate (Intercalación) que tiene definida tu columna, hay que aplicar un collate CI_AI (Case Insensitive, Accent Insensitive o lo que es lo mismo no sensible a mayúsculas ni a acentos)

supongamos que tu Tabla almacena en un campo Descripcion la información que quieres buscar, en SQL Server puedes hacer esto

Código SQL:
Ver original
  1. SELECT * FROM TuTabla
  2. WHERE
  3. Descripcion COLLATE SQL_Latin1_General_CP1_CI_AI LIKE '%arbol%'

De esta manera te regresaría cualquiera de las siguientes combinaciones:

Código:
Arbol
Árbol
ARBOL
ÁRBOL
arbol
árbol
ArBoL
áRbOl
etc....
Saludos
Leo.
  #3 (permalink)  
Antiguo 23/11/2010, 17:33
 
Fecha de Ingreso: junio-2003
Mensajes: 19
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: sqlite3 ignorar acentos en una consulta select

Buena tarde,
Muchas gracias por tu tiempo Leo, investigando sobre la posible solución que me brindas parece que no resulta tan sencillo, sqlite3 soporta la opción COLLATE, pero parece que no esta implementada la posibilidad de hacer busquedas sin tomar encuenta los acentos. Por lo que eh encontrado hay que crear la función y después registrarla para su uso, pero aun no entiendo como. Si tienes alguna otra idea o alguién ya ha tenido este problema agradezco de antemano su tiempo y esfuerzo.

Saludos
J. Angel Guerrero
  #4 (permalink)  
Antiguo 24/11/2010, 09:12
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: sqlite3 ignorar acentos en una consulta select

Hola de nuevo GUSANGEL.GEO, otra cosa que puedes hacer, aunque no es la más óptima, es eliminar los acentos en tus campos de búsqueda, es decir, algo como esto.

Código SQL:
Ver original
  1. SELECT * FROM TuTabla
  2. WHERE
  3. REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Descripcion),'á','a'), 'é','e'),'í','i'),'ó','o'),'ú','u'),'ñ','n') =
  4. REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER('árbol'),'á','a'), 'é','e'),'í','i'),'ó','o'),'ú','u'),'ñ','n')

Puedo suponer que SQLite3 tiene una función semejante al Replace de SQL Server. Te repito, esta no es la forma más óptima para hacer las consultas, pero dado que comentas que no es posible hacerlo con el Collate creo que te puede funcionar.

Espero que alguien con experiencia en SQLite3 te pueda ayudar a resolver este problema

Saludos
Leo.
  #5 (permalink)  
Antiguo 24/11/2010, 10:54
 
Fecha de Ingreso: junio-2003
Mensajes: 19
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: sqlite3 ignorar acentos en una consulta select

Buen día,

Muchas gracias Leo, la solución de usar la función reemplazar me ha funcionado estupendamente, no se como no se me había ocurrido, aunque tienes mucha razón no es el método ideal pero me ha sacado del apuro, mi base de datos no es muy grande así que no debo preocuparme por el tiempo de respuesta ni el uso de memoria, de todas formas voy a seguir investigando como implemetar funciones y así resolverlo usando COLLATE, nuevamente muchisimas gracias por el apoyo.

P.D. A todos aquellos que gustan de las bases de datos, recomiendo que le echen un ojo a sqlite3, es un proyecto interesante.

J. Ángel Guerrero

Etiquetas: acentos, consulta, ignorar, select, sqlite3
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




La zona horaria es GMT -6. Ahora son las 11:12.