我要检查,如果字符串包含字段值作为一个子字符串或没有。
select * from mytable where instr("mystring", column_name);
但是,这并不对字边界进行搜索。
select * from mytable where instr("mystring", concat('[[:<:]]',column_name,'[[:>:]]');
也不行。 如何纠正呢?
我要检查,如果字符串包含字段值作为一个子字符串或没有。
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