我想检查字符串是否包含字段值作为子字符串。
select * from mytable where instr("mystring", column_name);
但这不会搜索字边界。
select * from mytable where instr("mystring", concat('[[:<:]]',column_name,'[[:>:]]');
也不起作用。怎么纠正这个?
答案 0 :(得分:2)
您可以使用REGEXP
运算符执行此操作:
SELECT * FROM mytable WHERE 'mystring' REGEXP CONCAT('[[:<:]]', column_name, '[[:>:]]');
但请注意,这是慢。如果您关心单词,最好使用the MySQL's FULLTEXT
search feature。或者进行正常的InStr()
检查,然后过滤结果。
答案 1 :(得分:0)
如果您不需要使用instr
使用like
的返回值
select * from mytable where column_name like '%mystring%';
答案 2 :(得分:0)
正如您在问题asked yesterday中已经讨论过的那样,没有索引可以使用,性能会变差,但这可能会有效:
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