MySQL:什么是LIKE的反向版本?
MySql中的LIKE运算符用于查找包含我们查询文本的行,例如:
select name from user where name like "%john%"
这将返回John Smith
, Peter Johnson
等
如果我需要相反的东西 – 查找包含在查询文本中的行? 例如,我给它John Smith and Peter Johnson are best friends
并希望它find我可以在这个string中find的所有名字。
怎么做?
以下是您可以实现所描述的方法:
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'),那么上面的查询仍然会错误地返回该logging。 另外请注意,如果您的列可能包含反斜杠和/或“ C转义字符 ”,那么他们也需要转义。 这一切都在MySQLstring比较函数中解释。 例如,下面的SQL将返回1:
SELECT 'val\%ue' LIKE CONCAT('%', 'al\\\\\%u' ,'%');
单个反斜杠需要用\\\\
转义,并且%
字符被转义: \%
。
这是一个文本索引问题。 如果我做对了,你的任务是以自由forms的文本查找所有对人的引用,而与LIKE或NOT LIKE无关。
在一般forms中,您正在查找引用的数据库表充当一些文本索引algorithm的字典。 使用这个字典build立inputstring的索引,并希望你会得到一些匹配。