SSIS 2005/2008 выполняет нечеткий поиск и группирование. Есть ли функция, которая делает то же самое в T-SQL?





В SQL Server есть функция SOUNDEX ():
SELECT *
FROM Customers
WHERE SOUNDEX(Lastname) = SOUNDEX('Stonehouse')
AND SOUNDEX(Firstname) = SOUNDEX('Scott')
В прошлом я обнаружил, что soundex очень примитивен, он работает, но его детализация очень грубая. Double Metaphone - более новая версия фонетического сопоставления, но она все еще ограничивает.
Полнотекстовый поиск - отличный нечеткий инструмент. Краткий букварь здесь
Нечеткий поиск использует подход q-граммы, разбивая строки на крошечные подстроки и индексируя их. Затем вы можете искать ввод, разбивая его на строки одинакового размера. Вы можете проверить формат их индекса и написать функцию CLR для использования того же стиля индекса, но вы, возможно, говорите о достаточном объеме работы.
На самом деле довольно интересно, как они это сделали, очень просто, но обеспечивает очень надежное сопоставление и легко настраивается.
Из этого я припоминаю индекс, когда я в последний раз смотрел на него, каждая q-грамма или подстрока хранится в строке в таблице (индекс). Эта строка содержит столбец nvarchar (среди других значений), который используется как двоичные данные и содержит ссылки на совпадающие строки.
Есть также открытый отзыв о Microsoft Connect для этой функции.
5 марта 2009 г. на сайте www.sqlservercentral.com будет размещена статья с образцом Jaro-Winkler TSQL.
Правда - забыл об этом. Но не думайте, что это сработает для числовых идентификаторов, скажем, с транспонированными цифрами или что-то в этом роде.