sql >> Base de Datos >  >> RDS >> Sqlserver

Encuentre registros sql que contengan cadenas similares

Si realmente desea definir la similitud de la manera exacta en que ha formulado su pregunta, entonces, como dice, debe implementar el cálculo de distancia de Levensthein. Ya sea en código calculado en cada fila recuperada por un DataReader o como una función de SQL Server.

El problema planteado es en realidad más complicado de lo que parece a primera vista, porque no se puede suponer que se sabe lo que comparten mutuamente elementos entre dos cadenas pueden ser.

Entonces, además de la distancia Levensthein, probablemente también desee especificar un número mínimo de caracteres consecutivos que realmente deben coincidir (para que se concluya una similitud suficiente).

En resumen:suena como un enfoque demasiado complicado y que requiere mucho tiempo/lento.

Curiosamente, en SQL Server 2008 tiene la función DIFERENCIA que puede ser usado para algo como esto.

Evalúa el valor fonético de dos cadenas y calcula la diferencia. No estoy seguro de si logrará que funcione correctamente para expresiones de varias palabras, como títulos de películas, ya que no maneja bien los espacios o los números y pone demasiado énfasis en el comienzo de la cadena, pero sigue siendo interesante. predicado a tener en cuenta.

Si lo que eres realmente intentar describir es algún tipo de función de búsqueda, entonces debe buscar en las capacidades de búsqueda de texto completo de SQL Server 2008. Proporciona compatibilidad integrada con el diccionario de sinónimos, predicados de SQL elaborados y un mecanismo de clasificación para las "mejores coincidencias"

EDITAR:si está buscando eliminar duplicados, tal vez podría buscar SSIS Fuzzy Lookup y Fuzzy Group Transformation. No lo he probado yo mismo, pero parece una pista prometedora.

EDIT2:si no desea profundizar en SSIS y aún tiene problemas con el rendimiento del algoritmo de distancia de Levensthein, tal vez podría probar este algoritmo que parece ser menos complejo.