MySQL:什么是LIKE的反向版本?
MySql中的LIKE运算符用于查找包含我们查询文本的行,例如:
select name from user where name like "%john%"
这将返回John Smith
, Peter Johnson
等。
如果我需要相反的结果 - 查找查询文本中包含的行,该怎么办? 例如,我给它John Smith and Peter Johnson are best friends
并希望它找到我可以在这个字符串中找到的表中的所有名字。
怎么做?
以下是您可以实现所描述的一种方式:
SELECT name FROM user
WHERE 'John Smith and Peter Johnson are best friends' LIKE
CONCAT('%', name, '%')
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
可能包含%
或_
字符(例如,name ='v%alue'),那么上述查询仍然会错误地返回该记录。 还要注意,如果你的列可能包含反斜杠和/或“C转义字符”,那么他们也需要被转义。 这一切都在MySQL字符串比较函数中解释。 例如,下面的SQL将返回1:
SELECT 'val%ue' LIKE CONCAT('%', 'al\%u' ,'%');
单个反斜杠需要用\
转义, %
字符已转义: %
。
这是一个文本索引问题。 如果我做对了,你的任务就是在自由形式的文本中查找所有对人的引用,并且与LIKE或NOT LIKE无关。
在一般形式中,您正在查找引用的数据库表充当一些文本索引算法的字典。 使用这个字典在输入字符串上建立一个索引,并希望你会得到一些匹配。
链接地址: http://www.djcxy.com/p/38697.html