Boy Balantoy Ответов: 2

Получить наилучшее совпадение значения строки с записью SQL server


- Привет!

У меня есть список имен, которые я хочу сравнить с моей базой данных, чтобы увидеть, были ли какие-либо результаты, которые имеют самый высокий процент символов, совпадающих с записями, уже присутствующими в базе данных. Например: я хочу проверить, кто является ближайшей совпадающей записью, когда я предоставляю имя -Фред Пазас" и сравните его с моим столбцом базы данных с именем "CNAME" который уже имеет следующие записи :

Уилфред Пазас
Эльфред Пастзия
Фредди Пастразас


Я хочу, чтобы SQL-запрос вернул верхнюю запись 2 Уилфреда пазы и Фредди Пастразы в качестве ближайшего хита ( Я считаю ) с процентом символов, которые были сопоставлены системой на запись.

Что я уже пробовал:

Я пробовал сравнение charindex, а также функцию подстроки, но результаты немного не такие, как я предполагал. Я надеюсь, что вы могли бы помочь мне найти решение этой проблемы, поскольку мне очень нужно было это сделать для простого приложения, с которым я сейчас работаю, чтобы поделиться им с членами моей организации, состоящими из начинающих программистов. Заранее большое спасибо и счастливого вам дня впереди :)

2 Ответов

Рейтинг:
15

CHill60

Взгляните на решения по адресу Нечеткое сопоставление в SQL через имя[^]
Если у вас есть более старая версия SQL, вам придется написать свою собственную функцию Soundex.

Для "наилучшего соответствия" я бы рассчитал Расстояние Левенштейна[^] между значениями вашей базы данных и входным значением. Расстояние 0 означает точное, тогда чем меньше число, тем лучше совпадение. Существует пример CLR, чтобы сделать это в Алгоритм Расстояния Левенштейна – SQLServerCentral[^]


Boy Balantoy

Большое спасибо за это. Проблема Решена! :)

CHill60

Отличная новость!

Рейтинг:
1

Patrice T

Я боюсь, что решение вашей проблемы не интегрировано в SQL и, вероятно, не в каком-либо другом языке программирования.

Цитата:
Я пробовал сравнение charindex, а также функцию подстроки, но результаты немного не такие, как я предполагал.

Во-первых, вам нужно найти правильный алгоритм решения задачи; взгляните на
Редактировать расстояние - Википедия[^]
diff - Википедия[^]