У меня есть такая таблица:
| 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.
Заранее большое спасибо.
ОБНОВЛЕНИЕ
Кажется, у меня есть два варианта:
База данных обновляется раз в ночь.На самом деле я уже начал использовать новый табличный подход, так как это было то, что я изначально собирался сделать. Однако я начинаю думать, что разумнее добавлять «нечеткие» столбцы в основную таблицу, а затем при ночном обновлении добавлять скорректированные фамилии в новые / обновленные строки.
Переполнение стека: Какой подход лучше? Пользовательская функция REGEX, которую я могу использовать в SQL и, таким образом, избежать лишних столбцов? Или добавить в таблицу лишний столбец или два? Или новая таблица?