Я бы вообще не пошел по синониму.
Я бы очистил все значения в базе данных, используя стандартный набор правил.
Для каждого существующего значения замените все «0» на «O», удалите черточки и т. Д., Чтобы для каждого реального значения было только одно измененное значение, и сохраните его в отдельном поле \ table.
Тогда я бы очистил входные данные таким же образом и сделал бы сопоставление из двух частей. Проверьте фактическую входную строку по фактическим значениям базы данных (это даст вам точные совпадения) и, во-вторых, проверьте очищенный ввод по очищенным значениям. Затем упорядочите выходные данные по фактическим значениям базы данных, используя вычисление расстояния, например Расстояние Левенштейна , чтобы получить наиболее вероятное совпадение.
Теперь для ввода:
GRL8-ОЦ1
С частями:
GRL8-00I и GRL8-OOI
Все они нормализуются к одному и тому же значению GRL8OOI, хотя совпадение расстояний будет ближе для GRL8-OOI, так что это будет ваша ближайшая ставка.
Конечно, это значительно снижает "уникальность" ваших номеров деталей, но комбинация из двух частей и Левенштейна должна дать вам то, что вы ищете.
Существует несколько реализаций T-SQL Левенштейна доступно