0

我想检查一个字符串是否包含一个字段值作为子字符串。

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

但这不会搜索单词边界。

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

也不起作用。如何纠正这个?

4

3 回答 3

2

您可以使用运算符执行此REGEXP操作:

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

但是请注意,这很。如果您关心单词,最好使用MySQL 的FULLTEXT搜索功能。或者做一个正常的InStr()检查然后过滤结果。

于 2010-01-24T11:11:41.717 回答
0

如果您不需要instr使用的返回值,like而不是

select * from mytable where column_name like '%mystring%';
于 2010-01-24T11:08:28.950 回答
0

正如您昨天提出的问题中已经讨论的那样,不能使用任何索引并且性能会很差,但这可能会起作用:

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
于 2010-01-24T11:13:47.050 回答