mysql: instr определяет границы слова
Я хочу проверить, содержит ли строка значение поля в качестве подстроки или нет.
select * from mytable where instr("mystring", column_name);
но это не поиск по границам слов.
select * from mytable where instr("mystring", concat('[[:<:]]',column_name,'[[:>:]]');
тоже не работает. как это исправить?
3 ответа
Вы можете сделать это с помощью REGEXP
оператор:
SELECT * FROM mytable WHERE 'mystring' REGEXP CONCAT('[[:<:]]', column_name, '[[:>:]]');
Обратите внимание, однако, что этомедленно. Вы могли бы быть лучше, используя MySQLFULLTEXT
Функция поиска, если вы заботитесь о словах. Или сделать нормальный InStr()
проверьте, затем отфильтруйте результаты.
Если вам не нужно возвращаемое значение instr
использование like
вместо
select * from mytable where column_name like '%mystring%';
Как уже обсуждалось в вопросе, который вы задали вчера, индексы нельзя использовать, и производительность будет плохой, но это может сработать:
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