регулярное выражение или замена функции в предложении where запроса mysql - PullRequest
0 голосов
/ 07 апреля 2010

Я пишу MySQL запрос

select * from table where name like '%salil%'

, который работает нормально, но не возвращает записи с именем 'sal-il','sa@lil'.

Так что я хочу запрос что-то вроде ниже

select * from table where remove_special_character_from (имя) like '%salil%'

remove_special_character_from (name) - это метод mysql или регулярное выражение, которое удаляет все специальные символы из имени перед выполнением подобного.

Ответы [ 4 ]

1 голос
/ 07 апреля 2010

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

См. этот ответ как это сделать.

1 голос
/ 07 апреля 2010

Я согласен с Аароном и Кол. Шрапнель , что вы должны использовать дополнительный столбец в таблице, например. search_name для хранения нормализованной версии имени.

Я заметил, что этот вопрос изначально был помечен как ruby-on-rails. Если это часть приложения Rails, вы можете использовать обратный вызов before_save , чтобы установить значение этого поля.

1 голос
/ 07 апреля 2010

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

Таким образом, во время вставки вы удаляете все не-буквенные символы из данных и сохраняете их в поле data_norm для будущих поисков.

0 голосов
/ 07 апреля 2010

В MYSQL 5.1 вы можете использовать REGEXP для сопоставления регулярных выражений, подобных этому

   SELECT * FROM foo WHERE bar REGEXP "baz"

см. http://dev.mysql.com/doc/refman/5.1/en/regexp.html

Однако учтите, что это будет медленно , и вам следует делать то, что предлагали другие авторы, и сохранять чистое значение в отдельном поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...