MySQL的:INSTR指定单词边界(mysql: instr specify word bound

2019-10-19 06:23发布

我要检查,如果字符串包含字段值作为一个子字符串或没有。

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

但是,这并不对字边界进行搜索。

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

也不行。 如何纠正呢?

Answer 1:

您可以使用做到这一点REGEXP操作:

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

但是请注意,这是缓慢的 。 你可能是最好关闭使用了MySQL的FULLTEXT搜索功能 ,如果你关心的话。 或者做一个正常的InStr()校验,那么筛选结果。



Answer 2:

如果您不需要的返回值instr使用like代替

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


Answer 3:

正如你的问题已经讨论过昨日问 ,可以使用任何指标和性能将是不好的,但是这可能是工作:

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


文章来源: mysql: instr specify word boundaries