Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Finden Sie SQL-Datensätze, die ähnliche Zeichenfolgen enthalten

Wenn Sie Ähnlichkeit wirklich genau so definieren möchten, wie Sie es in Ihrer Frage formuliert haben, müssen Sie - wie Sie sagen - die Berechnung der Levensthein-Distanz implementieren. Entweder in Code, der für jede von einem DataReader abgerufene Zeile berechnet wird, oder als SQL Server-Funktion.

Das genannte Problem ist tatsächlich kniffliger, als es auf den ersten Blick scheinen mag, weil Sie nicht davon ausgehen können, zu wissen, was die gegenseitig geteilt Elemente zwischen zwei Zeichenfolgen sein können.

Neben der Levensthein-Distanz möchten Sie also wahrscheinlich auch eine Mindestanzahl aufeinanderfolgender Zeichen angeben, die tatsächlich übereinstimmen müssen (um auf eine ausreichende Ähnlichkeit zu schließen).

Zusammenfassend:Es klingt nach einem übermäßig komplizierten und zeitaufwändigen/langsamen Ansatz.

Interessanterweise haben Sie in SQL Server 2008 die DIFFERENCE-Funktion, die kann für so etwas verwendet werden.

Es wertet den phonetischen Wert zweier Zeichenfolgen aus und berechnet die Differenz. Ich bin mir nicht sicher, ob Sie es für Mehrwortausdrücke wie Filmtitel richtig zum Laufen bringen werden, da es nicht gut mit Leerzeichen oder Zahlen umgeht und zu viel Wert auf den Anfang der Zeichenfolge legt, aber es ist immer noch interessant Prädikat zu beachten.

Wenn, was Sie eigentlich sind Wenn Sie versuchen, eine Art Suchfunktion zu beschreiben, sollten Sie sich die Volltextsuchfunktionen von SQL Server 2008 ansehen. Sie bieten integrierte Thesaurus-Unterstützung, ausgefallene SQL-Prädikate und einen Ranking-Mechanismus für „beste Übereinstimmungen“

BEARBEITEN:Wenn Sie Duplikate eliminieren möchten, können Sie sich vielleicht SSIS Fuzzy Lookup und Fuzzy Group Transformation ansehen. Ich habe das selbst noch nicht ausprobiert, aber es sieht nach einem vielversprechenden Hinweis aus.

EDIT2:Wenn Sie nicht in SSIS eintauchen möchten und immer noch mit der Leistung des Levensthein-Distance-Algorithmus kämpfen, können Sie vielleicht diesen Algorithmus ausprobieren, der weniger komplex zu sein scheint.