Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Fuzzy Matching

Едно доста бързо специфично за домейн решение може да бъде да се изчисли сходство на низове с помощта на SOUNDEX и числово разстояние между 2 низа. Това наистина ще помогне само когато имате много продуктови кодове.

Използвайки прост UDF като по-долу, можете да извлечете числовите знаци от низ, така че след това да получите 2200 от 'CLC 2200npk' и 1100 от 'CLC 1100', така че вече можете да определите близостта въз основа на изхода SOUNDEX на всеки вход както и близостта на цифровия компонент на всеки вход.

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

Що се отнася до алгоритмите с общо предназначение, има няколко, които могат да ви помогнат с различна степен на успех в зависимост от размера на набора от данни и изискванията за производителност. (и двете връзки имат налични TSQL реализации)

  • Double Metaphone – Това алго ще ви даде по-добро съответствие от soundex с цената на скоростта, но наистина е добро за корекция на правописа.
  • Разстояние на Левенщайн – Това ще изчисли колко натискания на клавиши биха били необходими, за да се превърне един низ в друг, например, за да стигнете от „CLC 2200npk“ до „CLC 2200“ е 3, докато от „CLC 2200npk“ до „CLC 1100“ е 5.

Ето една интересна статия, която прилага и двата алгоза заедно, което може да ви даде няколко идеи.

Е, надявам се нещо от това да помогне малко.

РЕДАКТИРАНЕ:Ето една много по-бърза частична реализация на Levenshtein Distance (прочетете публикацията, тя няма да върне точно същите резултати като нормалната). В моята тестова таблица от 125 000 реда тя работи за 6 секунди в сравнение с 60 секунди за първата, към която свързах.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка на SQL Server - HRESULT E_FAIL е върнат от повикване към COM компонент

  2. SQL UPDATE оператор за превключване на две стойности в два реда

  3. SQL Server - Заявка за късо съединение?

  4. Вземете списък с бази данни от SQL Server

  5. Преобразувайте формата на датата във формат ДД/МММ/ГГГГ в SQL Server