sql >> Database >  >> RDS >> Sqlserver

Zoek sql-records met vergelijkbare tekenreeksen

Als je gelijkenis echt wilt definiëren op de exacte manier die je in je vraag hebt geformuleerd, dan zou je - zoals je zegt - de Levensthein-afstandsberekening moeten uitvoeren. Ofwel in code berekend op elke rij die wordt opgehaald door een DataReader of als een SQL Server-functie.

Het genoemde probleem is eigenlijk lastiger dan het op het eerste gezicht lijkt, omdat je er niet vanuit kunt gaan dat je weet wat de onderling gedeelde elementen tussen twee strings kunnen zijn.

Dus naast Levensthein Distance wil je waarschijnlijk ook een minimaal aantal opeenvolgende karakters opgeven die daadwerkelijk moeten matchen (om voldoende gelijkenis te kunnen concluderen).

Samengevat:het klinkt als een te ingewikkelde en tijdrovende/langzame aanpak.

Interessant is dat je in SQL Server 2008 de DIFFERENCE-functie hebt die mag voor zoiets als dit worden gebruikt.

Het evalueert de fonetische waarde van twee strings en berekent het verschil. Ik weet niet zeker of je het goed kunt laten werken voor uitdrukkingen met meerdere woorden, zoals filmtitels, omdat het niet goed omgaat met spaties of cijfers en teveel nadruk legt op het begin van de tekenreeks, maar het is nog steeds een interessante predikaat om op te letten.

Als wat je bent eigenlijk proberen te beschrijven is een soort zoekfunctie, dan moet je kijken naar de Full Text Search-mogelijkheden van SQL Server 2008. Het biedt ingebouwde ondersteuning voor Thesaurus, mooie SQL-predikaten en een rangschikkingsmechanisme voor "beste overeenkomsten"

BEWERKEN:Als u duplicaten wilt verwijderen, kunt u misschien kijken naar SSIS Fuzzy Lookup en Fuzzy Group Transformation. Ik heb dit zelf niet geprobeerd, maar het ziet eruit als een veelbelovende aanwijzing.

EDIT2:als je niet in SSIS wilt graven en nog steeds worstelt met de prestaties van het Levensthein Distance-algoritme, kun je dit algoritme misschien proberen, dat minder complex lijkt.



  1. SQL Server:filteruitvoer van sp_who2

  2. Meerdere databases gebruiken in Laravel

  3. Kleur en lettertypen wijzigen in SQL Server Management Studio (SSMS) - SQL Server / TSQL-zelfstudie, deel 12

  4. Overeenkomsten en verschillen tussen RANK-, DENSE_RANK- en ROW_NUMBER-functies