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

funcion para comparar cadenas

Estas en el tema de funcion para comparar cadenas en el foro de Mysql en Foros del Web. Buenas, estoy haciendo una consulta cruzada de t1 y t2 tiene la misma estructura con campos nombre, direccion, etc y veo la necesidad de compara ...
  #1 (permalink)  
Antiguo 19/05/2009, 16:06
 
Fecha de Ingreso: febrero-2006
Mensajes: 44
Antigüedad: 20 años, 7 meses
Puntos: 0
funcion para comparar cadenas

Buenas, estoy haciendo una consulta cruzada
de t1 y t2 tiene la misma estructura con campos nombre, direccion, etc y veo la necesidad de compara si existen registro en el campo nombre de t1 que tengan similitud relativa con campo nombre de t2

ejemplo:
t1
nombre: Juan Jose Espinoza Ugarte
codigo: 44

t2
nombre: Juam Jose Espinosa Ugarte
codigo: 123

esos registros son iguales, pero por tema de descuido se digito diferente unos caracteres, en el filtro eso debe aceptarse como mínimo o inclusive algun caracter más. espero ue ayuden, porque ya me pase buscando horas una funcion parecida a la funcion levenshtein() de PHP, necesito hacerlo en mysql por tema de valocidad, ya qu se manejan unos 200,000 contra unos 250 a comparar, y en php se demora excesivamente.

Gracias
  #2 (permalink)  
Antiguo 19/05/2009, 16:12
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 17 años, 8 meses
Puntos: 360
Respuesta: funcion para comparar cadenas

Mira esto, te puede servir.

http://codejanitor.com/wp/2007/02/10...ored-function/

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 19/05/2009, 16:30
 
Fecha de Ingreso: febrero-2006
Mensajes: 44
Antigüedad: 20 años, 7 meses
Puntos: 0
Respuesta: funcion para comparar cadenas

bueno ya encontre la solucion, si alguien desea usarla adjunto la funcion que encontre:

Código PHP:
CREATE FUNCTION LEVENSHTEIN (s1 VARCHAR(255), s2 VARCHAR(255))
  
RETURNS INT
    DETERMINISTIC
      BEGIN
        
DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT;
        DECLARE 
s1_char CHAR;
        DECLARE 
cv0, cv1 VARBINARY(256);
        
SET s1_len = CHAR_LENGTH(s1), s2_len = CHAR_LENGTH(s2), cv1 = 0x00, j = 1, i = 1, c = 0;
        IF 
s1 = s2 THEN
          
RETURN 0;
        ELSEIF 
s1_len = 0 THEN
          
RETURN s2_len;
        ELSEIF 
s2_len = 0 THEN
          
RETURN s1_len;
        ELSE
          WHILE 
j <= s2_len DO
            
SET cv1 = CONCAT(cv1, UNHEX(HEX(j))), j = j + 1;
          
END WHILE;
          WHILE 
i <= s1_len DO
            
SET s1_char = SUBSTRING(s1, i, 1), c = i, cv0 = UNHEX(HEX(i)), j = 1;
            WHILE 
j <= s2_len DO
                
SET c = c + 1;
                IF 
s1_char = SUBSTRING(s2, j, 1) THEN SET cost = 0; ELSE SET cost = 1; END IF;
                
SET c_temp = CONV(HEX(SUBSTRING(cv1, j, 1)), 16, 10) + cost;
                IF 
c > c_temp THEN SET c = c_temp; END IF;
                
SET c_temp = CONV(HEX(SUBSTRING(cv1, j+1, 1)), 16, 10) + 1;
                IF 
c > c_temp THEN SET c = c_temp; END IF;
                
SET cv0 = CONCAT(cv0, UNHEX(HEX(c))), j = j + 1;
            
END WHILE;
            
SET cv1 = cv0, i = i + 1;
          
END WHILE;
        
END IF;
        RETURN 
c;
      
END 
credito de la pagina
codejanitor.com
les dejaria la ruta completa, pero no tengo autorizacion.
  #4 (permalink)  
Antiguo 19/05/2009, 16:31
 
Fecha de Ingreso: febrero-2006
Mensajes: 44
Antigüedad: 20 años, 7 meses
Puntos: 0
Respuesta: funcion para comparar cadenas

Cita:
Iniciado por huesos52 Ver Mensaje
Mira esto, te puede servir.

[

Un saludo.
Gracias por el apoyo, creo que contestamos casi simultaneamente,
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 14:11.