sql >> Databáze >  >> RDS >> Sqlserver

SQL Fuzzy Matching

Poměrně rychlým řešením specifickým pro doménu může být výpočet podobnosti řetězců pomocí SOUNDEX a číselné vzdálenosti mezi 2 řetězci. To opravdu pomůže pouze tehdy, když budete mít hodně produktových kódů.

Pomocí jednoduchého UDF, jak je uvedeno níže, můžete extrahovat číselné znaky z řetězce, takže pak můžete získat 2200 z „CLC 2200npk“ a 1100 z „CLC 1100“, takže nyní můžete určit blízkost na základě výstupu SOUNDEX každého vstupu. stejně jako blízkost číselné složky každého vstupu.

CREATE Function [dbo].[ExtractNumeric](@input VARCHAR(1000))
RETURNS INT
AS
BEGIN
    WHILE PATINDEX('%[^0-9]%', @input) > 0
    BEGIN
        SET @input = STUFF(@input, PATINDEX('%[^0-9]%', @input), 1, '')
    END
    IF @input = '' OR @input IS NULL
        SET @input = '0'
    RETURN CAST(@input AS INT)
END
GO

Pokud jde o obecné algoritmy, existuje několik, které vám mohou pomoci s různým stupněm úspěchu v závislosti na velikosti datové sady a požadavcích na výkon. (oba odkazy mají k dispozici implementace TSQL)

  • Double Metaphone – Toto algo vám poskytne lepší shodu než soundex za cenu rychlosti, ale je opravdu dobré pro opravu pravopisu.
  • Levenshtein Distance – Tato možnost vypočítá, kolik stisknutí kláves by bylo zapotřebí k přeměně jednoho řetězce na jiný, například k přechodu z „CLC 2200npk“ na „CLC 2200“ je 3, zatímco z „CLC 2200npk“ na „CLC 1100“ je 5.

Zde je zajímavý článek, který aplikuje obě alga dohromady, což vám může poskytnout několik nápadů.

No, doufám, že něco z toho trochu pomůže.

EDIT:Zde je mnohem rychlejší částečná implementace Levenshtein Distance (přečtěte si příspěvek, nevrátí přesně stejné výsledky jako normální). Na mé testovací tabulce s 125 000 řádky běží za 6 sekund ve srovnání s 60 sekundami u prvního, na který jsem odkazoval.




  1. Pochopení skupiny redo log vs soubor vs člen

  2. Nastavení výchozího veřejného profilu pro databázovou poštu (SSMS)

  3. Přepnutí oddílu na SQL Server (T-SQL)

  4. Řešení chyb nesouladu architektury při používání aplikace Microsoft Access