2015-08-14 8 views
-2

У меня есть строка в @SzQuickSearch в sql proc.
Строка иногда содержит адрес: 123 Smith St.
Если пользователь, или сам пытается найти эту строку из 123 Smith Street, я ничего не получаю обратно.SQL Server Запрос RegEx

Итак, я пытаюсь найти способ справиться с этим. Это также происходит с Ave. (Avenue) и Rd. (Road)

Запрос теперь выглядит что-то вроде этого

Or s.szAddress_StreetName like '%' + @szQuickValue + '%' 

szAdress_StreeName будет содержать '123 Smith Street', и @szQuickvalue имеет пользователя, введенное значение '123' Smith St.

Как я могу вернуть рекорд 123 Smith St, когда поисковые кто-то для 123 Smith Street?

+0

Престол [Легче способ заменить несколько слов с сокращениями] (http://stackoverflow.com/questions/16523305/easier -way-to-replace-a-few-words-with-abbreviations) и в идеале нормализуется при записи. –

ответ

0

Выберите «каноническую» форму слова и выполните поиск и замену синонимов, которые вы храните в столбце бок о бок с оригиналом.

Когда пользователь выполняет поиск, вы также выполняете этот поиск и замену, сопоставляя столбец, содержащий каноническую форму, и возвращаете оригинал.

SQL Server не поддерживает регулярное выражение (всего несколько подстановочных знаков), и описанный выше подход даст шанс на хорошую производительность.

Update 1

Select col from table where colCanonical = 'The teacher' 

Где SearchString также обрабатывается так, что все слова заменяются канонической форме. Пользователь мог бы дать «Судоводитель ...

Примеры данных

col    colCanonical 
The master ... The teacher ... 
The teacher ... The teacher ... 
+0

Извините, только что вернулся из отпуска и увидел это. Спасибо за ответ. Можете ли вы привести мне пример того, что вы говорите: «Сопоставьте столбец, содержащий каноническую форму, и верните оригинал». Вы хотите сделать это в SQL? Если да, напишите короткий код примера. Благодаря! – user3014473

+0

Sql является его частью. См. Обновление 1. – buckley

+0

Спасибо, Бакли. Это очень помогает! – user3014473