Вы можете начать с использования SOUNDEX()
, это, вероятно, подойдет для того, что вам нужно
Недостатки SOUNDEX()
:
- этонеспособность различать более длинные строки.Учитываются только первые несколько символов, более длинные строки, которые расходятся в конце, генерируют одно и то же значение SOUNDEX
- тот факт, что первая буква должна быть одинаковой, иначе совпадение будет нелегким.В SQL Server есть функция DIFFERENCE (), которая сообщает вам, на сколько два значения SOUNDEX разделены, но я думаю, что в MySQL не встроено ничего подобного.
- для MySQL, по крайней мере в соответствии с документами , SOUNDEX не работает для ввода Unicode
Пример:
SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')
/* all of these return 'M262' */
Для более сложных задач, я думаю, вам нужно посмотреть на Левенштейновское расстояние (также называется «редактировать расстояние») из двух строк и работает с порогом.Это более сложное (= более медленное) решение, но оно обеспечивает большую гибкость.
Главный недостаток состоит в том, что вам нужны обе строки для вычисления расстояния между ними.С помощью SOUNDEX вы можете сохранить предварительно рассчитанный SOUNDEX в своей таблице и сравнить / отсортировать / сгруппировать / отфильтровать его.С расстоянием Левенштейна вы можете обнаружить, что разница между «Microsoft» и «Nzcrosoft» составляет всего 2, но для достижения этого результата потребуется гораздо больше времени.
В любом случае пример функции расстояния Левенштейна для MySQL можно найти в Расстояние Левенштейна в качестве хранимой функции MySQL .