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

问题描述 投票:34回答:3

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

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

这将返回John SmithPeter Johnson等。

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

怎么做?

sql mysql
3个回答
51
投票

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

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

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有可能包含%_字符(例如name ='v%alue'),那么上述查询仍会错误地返回该记录。另请注意,如果您的列可能包含反斜杠和/或“C escape characters”,那么它们也需要进行转义。这一切都在MySQL String Comparison Functions中解释过。例如,下面的SQL将返回1:

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

单个反斜杠需要用\\\\进行转义,并且%字符被逃脱:\%


-2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.