mysql: instr определяет границы слова - PullRequest
0 голосов
/ 24 января 2010

Я хочу проверить, содержит ли строка значение поля в качестве подстроки или нет.

select * from mytable where instr("mystring", column_name);

, но это не ищет границы слов.

select * from mytable where instr("mystring", concat('[[:<:]]',column_name,'[[:>:]]');

тоже не работает. как это исправить?

Ответы [ 3 ]

2 голосов
/ 24 января 2010

Вы можете сделать это, используя оператор REGEXP:

SELECT * FROM mytable WHERE 'mystring' REGEXP CONCAT('[[:<:]]', column_name, '[[:>:]]');

Обратите внимание, что это медленно . Возможно, вам лучше использовать функцию поиска FULLTEXT MySQL , если вам нужны слова. Или выполните обычную проверку InStr(), а затем отфильтруйте результаты.

0 голосов
/ 24 января 2010

Как уже обсуждалось в вопросе, который вы задали вчера , никакие индексы не могут быть использованы и производительность будет плохой, но это может сработать:

select *
from mytable
where 'mystring' = column_name                           -- exact match
   or 'mystring' like concat('% ', column_name)          -- word at the end
   or 'mystring' like concat(column_name, ' %')          -- word at beginning
   or 'mystring' like concat('% ', column_name, ' %')    -- word in the middle
0 голосов
/ 24 января 2010

Если вам не нужно возвращаемое значение instr, используйте like вместо

select * from mytable where column_name like '%mystring%';
...