Вопрос

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

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

но это не поиск по границам слов.

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

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

Это было полезно?

Решение

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

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

Однако обратите внимание, что это медленный.Возможно, вам лучше всего использовать MySQL FULLTEXT функция поиска если тебе важны слова.Или сделай нормальный 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top