SQL Server Express: что-то лучше, чем LIKE для запросов ПОХОЖИХ имен - PullRequest
0 голосов
/ 26 января 2012

Мне нужен специальный оператор, который может быть немного лучше, чем LIKE, для запроса "похожих" значений.

СЦЕНАРИЙ:
У меня есть таблица учеников, и у меня есть таблица уроков. Таблица уроков была импортирована из другого программного обеспечения, поэтому столбец StudentID в импортируемых строках равен нулю. Поэтому нам нужно, чтобы пользователь вручную выбрал соответствующую строку ученика для каждого урока, а затем можно заполнить столбец StudentID, чтобы они правильно синхронизировались. Обе таблицы содержат имена и фамилии, но многие из них, скорее всего, будут написаны с ошибками.

После импорта строк я хотел бы представить пользователю имена из строк учащихся, имена которых являются «пятью наиболее похожими» среди значений, хранящихся в каждой строке урока. На самом деле, я хотел бы представить их в порядке убывания от наиболее до наименее похожих.

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

Насколько я понимаю (из нетехнических статей), почтовое отделение США очень хорошо справляется с этой проблемой ... Люди все время неправильно пишут названия и названия улиц, но их алгоритм "найти похожие" очень эффективен.

Я знаю, что алгоритм может варьироваться от одного решения к другому. Например, я прочитал в статье, что некоторые алгоритмы учитывают фонетику, другие учитывают количество гласных и согласных, в то время как другие считают, что «T» звучит как «P» при разговоре по телефону.

Я МОГУ ЗАГРУЗИТЬ каждую запись в код моего приложения и написать свой собственный алгоритм на c #, VB.NET или чем-то еще, но есть много проблем с этим, включая производительность. Я предпочел бы выполнить это в запросе, поэтому я ищу альтернативы.

Я использую SQL Server Express, но уверен, что решение применимо к другим платформам баз данных.

Ответы [ 2 ]

1 голос
/ 26 января 2012

SQL FreeText может работать для вас:

http://msdn.microsoft.com/en-us/library/ms176078.aspx

Он ищет тезаурус, хотя я не уверен, насколько хорошо он работает с именами. Однако его очень легко реализовать.

1 голос
/ 26 января 2012

SQL Server поддерживает функцию SOUNDEX (), но это работает только для схожих по звучанию имен, и это не очень хорошо, по крайней мере, если вы работаете с неанглийскими текстами.Вы можете написать свою собственную функцию на c # или vb.net, упрощая любой алгоритм, который может соответствовать вашим потребностям, и импортировать ее как скалярную функцию на сервер sql.

...