с помощью REPLACE в предложении WHERE для проверки перестановок орфографии - MS SQL

У меня есть такая таблица:

| id | lastname | firstname |
|  1 | doe      | john      |
|  2 | oman     | donald    |
|  3 | o'neill  | james     |
|  4 | onackers | sharon    |

По сути, пользователи будут искать по первым буквам фамилии.

Я хочу иметь возможность возвращать результаты, содержащие и не содержать знаков препинания из базы данных. Например, когда пользователь ищет: на

, я хочу вернуть оба: o'neill, onackers

Я хочу, чтобы кто-то мог искать "o, on, oneill, o neill, и т. Д.", Чтобы получить o'neill.

Так что лучший способ сделать это, кажется, значение столбца lastname, и в предложении WHERE выполняется поиск двух его перестановок с помощью оператора OR. Один, в котором любые специальные символы заменяются на _ в SQL, и другой, где все символы, отличные от альфа (включая пробелы), пропали.

Я полагаю, что могу использовать подчеркивание в SQL-замене, чтобы сохранить доступным одно пространство.

У меня небольшая проблема с предложением WHERE. Я бы предпочел сделать это с помощью простого REPLACE, а не создавать функцию регулярного выражения, если это возможно. Если это не так, я понимаю:

@last_name (this is the nvarchar input)

SELECT id, lastname, firstname
FROM people
WHERE ((REPLACE(people.lastname, '[^A-Za-z]', '_') like @last_name + '%')
OR (REPLACE(people.lastnname,'[^A-Za-z ]', '') like @last_name + '%'))
ORDER BY lastname

Я почти уверен, что заменяемая часть должна быть на другой стороне LIKE. Я испортил структуру, но мне нужна помощь.

Я использую MSSQL Server 2005.

Заранее большое спасибо.

ОБНОВЛЕНИЕ

Кажется, у меня есть два варианта:

  1. Создайте функцию регулярного выражения с помощью CLR (извините, если я говорю это неправильно, я новичок в этом)
  2. Создайте дополнительные столбцы в таблице или создайте новую «fuzzyTable» с очищенными фамилиями.

База данных обновляется раз в ночь.На самом деле я уже начал использовать новый табличный подход, так как это было то, что я изначально собирался сделать. Однако я начинаю думать, что разумнее добавлять «нечеткие» столбцы в основную таблицу, а затем при ночном обновлении добавлять скорректированные фамилии в новые / обновленные строки.

Переполнение стека: Какой подход лучше? Пользовательская функция REGEX, которую я могу использовать в SQL и, таким образом, избежать лишних столбцов? Или добавить в таблицу лишний столбец или два? Или новая таблица?

6
задан Steph Rose 6 June 2011 в 14:53
поделиться