[SOLUCIONADO] Filtrar o ignorar en un Select los acentos de BD SQLite - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: Bases de Datos (https://gambas-es.org/forum-6.html) +--- Tema: [SOLUCIONADO] Filtrar o ignorar en un Select los acentos de BD SQLite (/thread-852.html) |
Filtrar o ignorar en un Select los acentos de BD SQLite - gambafeliz - 23-03-2022 Hola Me preguntaba como ustedes resuelven la obtención de datos de una columna Nombre donde deseas obtener todos los resultados tengan tilde (acento) o no. Ejemplo, tengo el siguiente nombre: Clínica y deseo obtener tanto Clinica como Clínica, como montan su Select Gracias. ==== Solucionado ============================================= Mi solución la describo abajo: 1. La palabra a buscar por el usuario: "Clinica" la paso a una función para sustituir las vocales por "_", quedaría así, "Cl_n_c_" y esta se la paso al Select a SQLite 2. Como dice Shordi, SQLite devuelve a un Result, todas las opciones posible que entren en "Cl_n_c_", este Result y la palabra original del usuario, la paso a una función para comparar y así ignorar las tildes y obtenemos la columna (ID) con las filas coincidentes a la palabra a buscar. Una vez identificadas las IDs las devuelvo en forma de Array. 3. Ahora tenemos un Array con los IDs completamente identificados. Ahora solo falta solicitar estos IDs a la base de datos y así tenemos todos los registros absolutamente correctos. (Clinica y Clínica, osea, todos los que quiere el usuario) RE: Filtrar o ignorar en un Select los acentos de BD SQLite - Shordi - 23-03-2022 En la base de datos puedes establecer el encoding a utf8 con Código: PRAGMA encoding="UTF-8"; De todas formas si la base de datos está mal formado o la carga de datos tiene los encodes mezclados no se garantiza que te vaya a ser fácil... según dicen. Saludos RE: Filtrar o ignorar en un Select los acentos de BD SQLite - gambafeliz - 23-03-2022 Gracias Shordi Te cuento: En la base de datos he puesto: .dbinfo Y en un apartado dice: text encoding: 1 (utf8) Perdón por mi ignorancia sobre SQLite, ¿es esto lo que me estas diciendo?, ¿entiendo que esta bien como lo tengo? RE: Filtrar o ignorar en un Select los acentos de BD SQLite - Shordi - 23-03-2022 Supongo. Si los datos son coherentes tu única opción es o preguntar por las dos cadenas (con y sin acentos) o utilizar el LIKE en el select. Saludos. RE: Filtrar o ignorar en un Select los acentos de BD SQLite - gambafeliz - 23-03-2022 Acabo de probar lo siguiente, te cuento; si hacemos el ejemplo de Clínica... lo que he hecho es crear una subrutina donde le paso la palabra de paso previa al enter de la busqueda, en esta subrutina sustituyo Clínica x Cl_n_c_ de esta manera like me da ambas situaciones, osea, Clínica y Clinica. Creo que esta es una buena opción. ¿Como la ves? RE: Filtrar o ignorar en un Select los acentos de BD SQLite - Shordi - 24-03-2022 Bueno... eso te filtra clínica, clinica, clónico , clonico, clónica y clonica... como mínimo. Es difícil normalizar la salida de datos si no se normaliza la entrada y no se sabe bien qué se busca. RE: Filtrar o ignorar en un Select los acentos de BD SQLite - gambafeliz - 24-03-2022 Tienes razón esta mañana lo pensé Pero seguí pensando en el mismo sentido. Y después de obtener lo que tu has dicho, pasamos este result a otra función para crear un array con las palabras que coincidan con la solicitud del usuario, determinando tan solo la tilde. Un ejemplo, el usuario busca, Clinica, pero en la base de datos solo existe Clínica, yo por ejemplo paso Cl_n_c_ y me devuelve tus palabras en un result, yo lo envío a una función el result y la palabra enviada a la bd y mi función se encarga de obtener solo los caracteres coincidentes y los devuelve en un array y este es el que verá el usuario. Parece que esto se acercaría mas. No crees? Por otra parte he visto estos enlaces en el Manual de SQLite (sobre latin y remove_diacritics=2) pero sinceramente soy incapaz por ahora de interpretarlo adecuadamente y no se crear lo que me explica, estos son los enlaces: https://www.sqlite.org/fts3.html https://www.sqlite.org/fts5.html Saludos |