MySQL:什么是LIKE的反向版本?
MySql中的LIKE运算符用于查找包含查询文本的行,例如:MySQL:什么是LIKE的反向版本?,sql,mysql,Sql,Mysql,MySql中的LIKE运算符用于查找包含查询文本的行,例如: select name from user where name like "%john%" 它将返回John Smith,Peter Johnson等 如果我需要相反的方法——查找包含在查询文本中的行,该怎么办?例如,我给它约翰·史密斯和彼得·约翰逊是最好的朋友,希望它能从表中找到这个字符串中可以找到的所有名字 如何做到这一点?这是一个文本索引问题。如果我没弄错的话,你的任务就是在一个自由格式的文本中找到所有对人的引用,而与喜欢或
select name from user where name like "%john%"
它将返回John Smith
,Peter Johnson
等
如果我需要相反的方法——查找包含在查询文本中的行,该怎么办?例如,我给它约翰·史密斯和彼得·约翰逊是最好的朋友
,希望它能从表中找到这个字符串中可以找到的所有名字
如何做到这一点?这是一个文本索引问题。如果我没弄错的话,你的任务就是在一个自由格式的文本中找到所有对人的引用,而与喜欢或不喜欢无关
在一般形式中,您要查找引用的数据库表充当某些文本索引算法的字典。使用此词典在输入字符串上建立索引,希望您能找到一些匹配项。以下是一种实现您所描述内容的方法:
SELECT name FROM user
WHERE 'John Smith and Peter Johnson are best friends' LIKE
CONCAT('%', name, '%')
我宁愿使用这种方法,而不是:
select *
from users
WHERE 'John Smith and Peter Johnson' LIKE CONCAT('%', name ,'%')
因为如果名称
可能包含%
或
字符(例如name='v%value'),那么上述查询仍然会错误地返回该记录。还要注意,如果列可能包含反斜杠和/或“”,那么它们也需要转义。这些都在本文中进行了解释。例如,下面的SQL将返回1:
SELECT 'val\%ue' LIKE CONCAT('%', 'al\\\\\%u' ,'%');
单个反斜杠需要用
\\\\
转义,%
字符被转义:\%
我也被这个问题弄糊涂了。在我脑海中,使用一个合适的全文搜索引擎,例如Sphinx或Solr/Lucene,怎么样?我想这里需要的是这样一个“从用户名中选择姓名”(搜索字符串)“John Smith和Peter Johnson是最好的朋友”。输出应为Johnm Smith、Peter Johnson等,前提是他们的名字。基本上是反向全文搜索.Dheer。哦这似乎对乔尔有用。
SELECT 'val\%ue' LIKE CONCAT('%', 'al\\\\\%u' ,'%');