Помимо SOUNDEX и DIFFERENCE — SQL Server

Я использую функции SOUNDEX и DIFFERENCE для анализа данных, представленных в таблице.

Но эта функция не работает при типе данных ниже. ITEM TYPE и ITEM SIZE совершенно разные.

SELECT SOUNDEX('ITEM TYPE'), SOUNDEX('ITEM SIZE')

op:-

I350    I350

For DIFFERENCE op: - 4

Я понимаю, что любой анализ, который делает человеческий разум, не может быть закодирован, тем не менее я хотел бы спросить, существуют ли какие-либо другие функции в SQL Server, которые помогут мне в анализе следующего уровня?


person Aditya    schedule 13.04.2017    source источник
comment
SOUNDEX не просто придумали разработчики SQL Server, это хорошо известная функция   -  person Damien_The_Unbeliever    schedule 13.04.2017
comment
Вы можете попробовать изучить алгоритм Яро Винклера, например. sqlservercentral.com/articles/Fuzzy+Match/65702   -  person Richard Hansell    schedule 13.04.2017
comment
@Damien_The_Unbeliever, это не ответ на мой вопрос :(   -  person Aditya    schedule 13.04.2017
comment
Вы используете функции для анализа. Это, вероятно, самое общее утверждение, которое вы могли бы здесь сделать. Что вас беспокоит? Этот soundex (который по сути является алгоритмом хеширования) возвращает одно и то же значение для двух разных входных данных? Хэши демонстрируют такое поведение.   -  person Ben Thul    schedule 15.04.2017
comment
Soundex — ужасный алгоритм для чего угодно в реальном мире. Он был разработан, чтобы попытаться найти совпадения для фамилий, но сводит все к слишком маленькому диапазону. Я подозреваю, что единственная причина, по которой он все еще существует, заключается в том, что Кнут считал его интересным алгоритмом с интеллектуальной точки зрения. Разница чуть лучше, но тоже не велика.   -  person brianary    schedule 22.01.2020


Ответы (1)


Вы можете использовать алгоритм, например расстояние Дамерау–Левенштейна.

Расстояние Дамерау–Левенштейна между двумя словами — это минимальное количество операций (состоящих из вставок, удалений или замен одного символа или перестановки двух соседних символов), необходимых для замены одного слова другим.

Существуют реализации T-SQL, такие как эта работа Стива Хэтчетта. В качестве альтернативы вы можете использовать реализацию на C#, скомпилировать DLL и загрузите его в SQL CLR. Скомпилированная версия должна быть быстрее.

Дополнительная информация о загрузке сборок CLR в SQL @ Сборка CLR C# внутри SQL Server.

person Serge    schedule 13.04.2017