LIKE 运算符用于查找包含查询文本的行,例如:
select name from user where name like "%john%"
将返回John Smith
,Peter Johnson
等
如果我需要相反的内容 - 在查询文本中查找 CONTAINED 的行怎么办?例如,我给它John Smith and Peter Johnson are best friends
,并希望它找到表格中可以找到的所有名称。
怎么做?
答案 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无关。
在一般形式中,您要查找引用的数据库表充当某些文本索引算法的字典。使用这个字典在输入字符串上构建一个索引,希望你会得到一些匹配。