LIKE operator in MySql is used to find rows that contain our query text, for example:
select name from user where name like \"%john%\"
Here's a way you can achieve what you describe:
SELECT name FROM user
WHERE 'John Smith and Peter Johnson are best friends' LIKE
CONCAT('%', name, '%')
This is a text indexing problem. If I get it right, your task is to find all references to people in a free-form text, and has nothing to do with LIKE or NOT LIKE.
In a general form, the database table against which you're looking for references acts as a dictionary to some text-indexing algorithm. Build an index on input string using this dictionary and hopefully you will get some matches.
select name
from users
where instr('John Smith and Peter Johnson', name) > 0
I would rather use this method instead of:
select *
from users
WHERE 'John Smith and Peter Johnson' LIKE CONCAT('%', name ,'%')
because if there is any chance that the name
could contain the %
or _
character (eg. name='v%alue') then the above query would still return that record incorrectly. Also note that if your column could contain backslashes and/or "C escape characters" then they would also need to be escaped. This is all explained in MySQL String Comparison Functions. For example the below SQL would return 1:
SELECT 'val\%ue' LIKE CONCAT('%', 'al\\\\\%u' ,'%');
The single backslash needed to be escaped with \\\\
and the %
character was escaped: \%
.