MySQL:LIKE的反向版本是什么?

时间:2009-01-23 06:23:44

标签: sql mysql

MySql中的

LIKE 运算符用于查找包含查询文本的行,例如:

select name from user where name like "%john%"

将返回John SmithPeter Johnson

如果我需要相反的内容 - 在查询文本中查找 CONTAINED 的行怎么办?例如,我给它John Smith and Peter Johnson are best friends,并希望它找到表格中可以找到的所有名称。

怎么做?

3 个答案:

答案 0 :(得分:51)

这是一种可以实现所描述内容的方式:

SELECT name FROM user 
WHERE 'John Smith and Peter Johnson are best friends' LIKE
  CONCAT('%', name, '%')

答案 1 :(得分:1)

select name
from users
where instr('John Smith and Peter Johnson', name) > 0

我宁愿使用这种方法代替:

select *
from users
WHERE  'John Smith and Peter Johnson' LIKE CONCAT('%', name ,'%')

因为如果name有可能包含%_字符(例如,姓名=' v%alue'),那么以上查询仍然会错误地返回该记录。另请注意,如果您的列可能包含反斜杠和/或" C escape characters"然后他们也需要逃脱。这在MySQL String Comparison Functions中都有解释。例如,下面的SQL将返回1:

SELECT 'val\%ue' LIKE CONCAT('%', 'al\\\\\%u' ,'%');

需要使用\\\\转义单个反斜杠,并转义%字符:\%

答案 2 :(得分:-2)

这是一个文本索引问题。如果我做对了,你的任务就是找到所有对自由格式文本的引用,并且与LIKE或NOT LIKE无关。

在一般形式中,您要查找引用的数据库表充当某些文本索引算法的字典。使用这个字典在输入字符串上构建一个索引,希望你会得到一些匹配。