2010-11-11 2 views
3

У меня есть база данных фамилии, имена, адрес и т.д.SQL Query для Фамилии с апострофом

Я пытаюсь выполнить поиск по фамилии, и у меня нет никаких проблем с escapting апострофов, например, данные в таблице «O'Malley», и если я ищу «O'Malley», я получаю намеченные результаты.

Однако, я также хотел бы иметь возможность искать «omalley» и все равно возвращать запись «O'Malley» из таблицы. Есть ли способ игнорировать апостроф в таблице?

Или, мой единственный другой способ создать поле последнего имени, которое лишено апострофа, а затем использовать и инструкцию OR для проверки обоих.

ответ

2

Возможно, вы можете проверить значение REPLACE('''','',column_name) и сохранить дополнительную «индексируемую» колонку.

+0

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

+0

SELECT wish_columns FROM table WHERE last_name = '' ИЛИ ​​REPLACE ('' '', '', last_name) = '' Не знаете, как вы сравниваете (точные или частичные), но это должно дать вам эту идею. Хотя вы также можете заменить строку в поисковом выражении и сделать apostraphe%% и использовать LIKE-компаратор. –

+0

$ query = "SELECT * FROM meminfo WHERE LOWER (REPLACE ('' '', '', lname)) = 'omalley'"; Это не дает никаких результатов. С этим что-то не так? – Brian

0

Замените все экземпляры ' на '? и используйте REGEXP.

SELECT * 
    FROM person 
WHERE name REGEXP 'o\'?malley' 

Если вы не знакомы с ? в регулярном выражении, это означает, что «этот персонаж может появиться здесь, но он не должен.» Например, colou?r будет соответствовать как «цвет», так и «цвет».

Примечание. Это решение работает в MySQL, но я не знаю, какую СУБД вы используете.

+0

Теперь, когда я думаю об этом, я не уверен, что это ответ на заданный вами вопрос. –

3

Попробуйте что-то вроде:

SELECT * -- replace with appropriate field list 
FROM MyTable 
WHERE LOWER(REPLACE(column_name,'''','')) = 'omalley' 

EDIT - Исправлено ЗАМЕНЫ синтаксис

+0

Bannister: установить столбец в ci? – ajreal

+0

@ajreal: Пожалуйста, уточните свой комментарий? –

+0

Это кажется лучшим ответом на меня. –

1

Если ваша база данных поддерживает SOUNDEX - вы можете searh на имена, которые "звучат" как Omalley. Soundex действительно полезна, когда вы хотите быстро найти людей и не должны спрашивать, как это сделать ... More about Soundex

Например, имя, которое я видел, Томас написал Томасу, Томусу, Томусу, даже если все написано по-разному , soundex найдет это, потому что все они «звучат одинаково». Особенно сейчас, когда люди ищут разные способы написания общих имен, это может быть очень полезно.

Смежные вопросы