Найти "похожие" номера деталей - PullRequest
0 голосов
/ 08 января 2011

Я надеюсь, вы найдете это интересным!C # является предпочтительным языком для решений или T-SQL.

Рассмотрим следующие элементы:

Элемент 1: NJ2-12GM50-Wö-V13

Элемент 2: NJ2-12GM50-Wo-V13

Вы можете догадаться, что человек, входящий в Предмет 1, скопировал и вставил, а человек, входящий в Предмет 2, просто использовал 'o', самый близкий английский символ, который он мог найти.

Когда кто-то вводит новый номер детали, такой как NJ2-12GM50-Wo-V13, мы хотим предложить ему, что они могут означать NJ2-12GM50-Wö-V13.

Для этого мы хотимпреобразовать все символы, которые могут быть сохранены как VARCHAR, в их упрощенную строчную букву.Меня интересует решение, которое преобразует, например, символ ASCII 246 (ö) в символ ASCII 111 (o).

Идея состоит в том, что если мы создадим поисковый столбец, содержащий все преобразованные версииномера по каталогу, мы можем легко сопоставить их с вводом с клавиатуры.

Конечно, я могу создать словарь для этого, но мне интересно, есть ли более разумный способ.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 08 января 2011

Используйте предложение COLLATE, чтобы привести строки к регистру и без учета акцента

IF 'NJ2-12GM50-Wö-V13' COLLATE Latin1_General_CI_AI
       =
   'NJ2-12GM50-Wo-V13' COLLATE Latin1_General_CI_AI
      PRINT 'matches'
ELSE
      PRINT 'no match

Итак, вы можете использовать его для проверки ввода пользователя

SELECT
   PartNo AS DidYouMeanThis,
   @Input AS WhenYouEnteredThis
FROM
   MyPartNumbers
WHERE
   PartNo COLLATE Latin1_General_CI_AI = @Input COLLATE Latin1_General_CI_AI

используя другой COLLATE, вы можете обеспечить точное совпадение при записи ...

IF NOT EXISTS (SLECT * FROM MyPartNumbers
            WHERE PartNo COLLATE Latin1_General_BIN = @Input Latin1_General_BIN)
   RAISERROR ('Oi! I asked DidYouMeanThis', 16, 1)
ELSE
   INSERT ...
2 голосов
/ 08 января 2011

Вероятно, вам лучше всего реализовать функцию в C # или T-SQL для вычисления расстояния Левенштейна между двумя номерами деталей.

1 голос
/ 08 января 2011

По какой-то причине я не могу добавить это в качестве комментария, но вы можете вместо этого (или также) рассмотреть сопоставление сопоставлений "обычно ищущих". Такая система, вероятно, будет полезна в целом (то есть «красная вешалка -> AB-999X» и т. Д.) И может решить эту проблему для вас. В любом случае, стоит подумать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...