mysql:instr指定单词边界

时间:2010-01-24 11:02:18

标签: mysql regex word-boundary

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

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

但这不会搜索字边界。

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

也不起作用。怎么纠正这个?

3 个答案:

答案 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