MySQL: What is a reverse version of LIKE?

前端 未结 3 2013
清酒与你
清酒与你 2020-11-27 06:00

LIKE operator in MySql is used to find rows that contain our query text, for example:

select name from user where name like \"%john%\"
相关标签:
3条回答
  • 2020-11-27 06:21

    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, '%')
    
    0 讨论(0)
  • 2020-11-27 06:33

    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.

    0 讨论(0)
  • 2020-11-27 06:37
    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: \%.

    0 讨论(0)
提交回复
热议问题