Едно доста бързо специфично за домейн решение може да бъде да се изчисли сходство на низове с помощта на 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 секунди за първата, към която свързах.