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 escape characters”,那么它们也需要进行转义。这一切都在MySQL String Comparison Functions中解释过。例如,下面的SQL将返回1:
SELECT 'val\%ue' LIKE CONCAT('%', 'al\\\\\%u' ,'%');
单个反斜杠需要用\\\\
进行转义,并且%
字符被逃脱:\%
。
这是一个文本索引问题。如果我做对了,你的任务是找到所有对自由格式文本的引用,并且与LIKE或NOT LIKE无关。
在一般形式中,您要查找引用的数据库表充当某些文本索引算法的字典。使用这个字典在输入字符串上构建索引,希望你会得到一些匹配。