我想检查一个字符串是否包含一个字段值作为子字符串。
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