sql >> Database teknologi >  >> RDS >> Sqlserver

Find sql-poster, der indeholder lignende strenge

Hvis du virkelig vil definere lighed på den nøjagtige måde, som du har formuleret i dit spørgsmål, så skal du - som du siger - implementere Levensthein Afstandsberegningen. Enten i kode beregnet på hver række hentet af en DataReader eller som en SQL Server-funktion.

Det angivne problem er faktisk mere vanskeligt, end det kan se ud ved første øjekast, fordi du ikke kan antage at vide, hvad der gensidigt delte elementer mellem to strenge kan være.

Så udover Levensthein Distance vil du sikkert også angive et minimum antal på hinanden følgende tegn, der faktisk skal matche (for at der kan konkluderes tilstrækkelig lighed).

Sammenfattende:Det lyder som en alt for kompliceret og tidskrævende/langsom tilgang.

Interessant nok har du i SQL Server 2008 DIFFERENCE-funktionen, som kan bruges til sådan noget.

Den evaluerer den fonetiske værdi af to strenge og beregner forskellen. Jeg er usikker på, om du får det til at fungere ordentligt til udtryk med flere ord, såsom filmtitler, da det ikke håndterer mellemrum eller tal og lægger for meget vægt på begyndelsen af ​​strengen, men det er stadig en interessant prædikat at være opmærksom på.

Hvis det du er faktisk forsøger at beskrive er en slags søgefunktion, så bør du se nærmere på funktionerne til fuld tekstsøgning i SQL Server 2008. Den giver indbygget synonymordbogsunderstøttelse, smarte SQL-prædikater og en rangeringsmekanisme for "bedste matches"

EDIT:Hvis du ønsker at fjerne dubletter, kan du måske se nærmere på SSIS Fuzzy Lookup og Fuzzy Group Transformation. Jeg har ikke selv prøvet dette, men det ligner et lovende lead.

EDIT2:Hvis du ikke ønsker at grave i SSIS og stadig kæmper med ydeevnen af ​​Levensthein Distance-algoritmen, kan du måske prøve denne algoritme, som ser ud til at være mindre kompleks.



  1. Hvorfor mislykkes min ODBC-forbindelse, når jeg kører en SSIS-indlæsning i Visual Studio, men ikke når den samme pakke kører med Execute Package Utility

  2. Sådan indstilles hvert element hentet fra SQLite-databasen til en egen tekstvisning

  3. Hvad er rækkefølgen af ​​poster i en tabel med en sammensat primærnøgle

  4. MySQL High Availability Framework Forklaret – Del II:Semisynkron replikering