Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-03-2017
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.089
Poder: 12
rretamar Va camino a la fama
Búsqueda aproximada en un campo

Hola.
Tengo una tabla con un campo de tipo varchar(8), conteniendo valores que son solo números, por ejemplo '4106293'.
Estoy buscando una función que permita realizar una búsqueda (usando Select ...from...) aproximada en ese campo, por ejemplo si cambia un único caracter, en este caso si se ingresa 4106793 (el usuario se equivocó en un caracter, tipeando 7 en lugar de 2) y que lo encuentre igual.

No se si se entiende lo que estoy planteando.

Saludos cordiales, Ramón
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.

Última edición por rretamar fecha: 11-03-2017 a las 05:05:54.
Responder Con Cita
  #2  
Antiguo 11-03-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.716
Poder: 8
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
No estoy seguro de si la BD que estes usando implemente algoritmos que comparan strings por distancia

Si lo podes implementar bajo codigo Delphi, quiza esto te sirva de ayuda: DelphiStringDistance

Si lo queres implementar por SQL, tendrias que leer sobre este tipo de algoritmos y ver si tu DB tiene algo similar o sino implementar una UDF o un Stored Procedure

La idea estos algoritmos es que comparas dos string, eso te devuelve un entero, que es la "distancia". La distancia es la cantidad de operaciones que se requieren para que el string A se convierta en string B. Distintos algoritmos calcularan diferentes distancias, pues asignan a las distintas operaciones (agregar/quitar/intercambiar caracter) un "peso" distinto

Si ves estos test creo que queda mas claro de lo que hablo. Por ejemplo, usando el Algoritmo de Levenshtein, la comparacion "Casa" vs "Calle" da resultado 3.

En tu caso deberias listar solo los elementos con una distancia menor o igual a 1, esto permite una "tolerancia" de un caracter

Última edición por AgustinOrtu fecha: 11-03-2017 a las 05:31:36.
Responder Con Cita
  #3  
Antiguo 13-03-2017
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.089
Poder: 12
rretamar Va camino a la fama
Gracias por responder.

La base de datos de MYSQL...sé cómo hacerlo en Lazarus, pero la idea es implementarlo directamente en SQL, usando la sintaxis del motor. No encontré una función de búsqueda de cadenas de ese tipo.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
  #4  
Antiguo 13-03-2017
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 455
Poder: 10
TOPX Va camino a la fama
Y ¿cómo lo hace en Lazarus?
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #5  
Antiguo 14-03-2017
dejehever dejehever is offline
Registrado
 
Registrado: mar 2017
Posts: 5
Poder: 0
dejehever Va por buen camino
Hola rretamar
tal vez te pueda funcionar la siguiente consulta

Código SQL [-]
SELECT * FROM tbl WHERE numero LIKE '%4106793%'
Responder Con Cita
  #6  
Antiguo 14-03-2017
dejehever dejehever is offline
Registrado
 
Registrado: mar 2017
Posts: 5
Poder: 0
dejehever Va por buen camino
Cita:
Empezado por dejehever Ver Mensaje
Hola rretamar
tal vez te pueda funcionar la siguiente consulta

Código SQL [-]
SELECT * FROM tbl WHERE numero LIKE '%4106793%'
o Para encontrar nombres que contengan exactamente cinco caracteres, utilice cinco instancias del _carácter de patrón:

Código SQL [-]
SELECT * FROM tbl WHERE numero LIKE '_____';
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta Aproximada ASUNCION SQL 9 31-10-2012 20:20:37
busqueda aproximada Zeos eduardo s. Varios 2 17-09-2008 13:50:45
campo de busqueda con otro campo josi Varios 1 04-06-2008 00:53:07
Escoger fecha Aproximada Carlex SQL 3 17-05-2006 14:56:55
Mejor suma aproximada Lepe Varios 15 16-01-2006 16:03:28


La franja horaria es GMT +2. Ahora son las 09:19:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi