MySql中的LIKE运算符用于查找包含查询文本的行,例如:
select name from user where name like "%john%"
Run Code Online (Sandbox Code Playgroud)
这将返回John Smith,Peter Johnson等等.
如果我需要相反-找到那些行所载在我们的查询文本?例如,我给它John Smith and Peter Johnson are best friends并希望它找到表中可以在此字符串中找到的所有名称.
怎么做?
Bil*_*win 57
这是一种你可以实现你所描述的方式:
SELECT name FROM user
WHERE 'John Smith and Peter Johnson are best friends' LIKE
CONCAT('%', name, '%')
Run Code Online (Sandbox Code Playgroud)
select name
from users
where instr('John Smith and Peter Johnson', name) > 0
Run Code Online (Sandbox Code Playgroud)
我宁愿使用这种方法而不是:
select *
from users
WHERE 'John Smith and Peter Johnson' LIKE CONCAT('%', name ,'%')
Run Code Online (Sandbox Code Playgroud)
因为如果有name可能包含%or_字符(例如 name='v%alue'),那么上面的查询仍然会错误地返回该记录。另请注意,如果您的列可能包含反斜杠和/或“ C 转义字符”,那么它们也需要进行转义。这在MySQL 字符串比较函数中都有解释。例如,下面的 SQL 将返回 1:
SELECT 'val\%ue' LIKE CONCAT('%', 'al\\\\\%u' ,'%');
Run Code Online (Sandbox Code Playgroud)
所需的单反斜线与转义\\\\和%字符被转义:\%。