복붙노트

[SQL] MySQL의 : LIKE의 역 버전은 무엇입니까?

SQL

MySQL의 : LIKE의 역 버전은 무엇입니까?

MySQL의에서 LIKE 연산자는 예를 들어, 우리의 쿼리 텍스트를 포함하는 행을 찾는 데 사용됩니다 :

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

존 스미스, 피터 존슨 등을 반환하는

내가 반대해야하는 경우 - 우리 쿼리 텍스트에 포함 된 행을 찾을 수 있습니까? 예를 들어 나는 존 스미스와 피터 존슨은 가장 친한 친구하고 나에게이 문자열에서 발견 될 수있는 테이블의 모든 이름을 찾으려면을 제공합니다.

그렇게하는 방법?

해결법

  1. ==============================

    1.여기에 당신이 무엇을 설명 달성 할 수있는 방법이있다 :

    여기에 당신이 무엇을 설명 달성 할 수있는 방법이있다 :

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

    2.

    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 ,'%')
    

    이름이 %를 포함하거나 수 _ 문자 기회가있는 경우 (예. 이름 = '브이 %의 ALUE')가 다음 위의 쿼리는 여전히 잘못 그 기록을 반환하기 때문이다. 또한 열이 백 슬래시 및 / 또는 그들은 또한 필요 "C 이스케이프 문자"를 포함 할 수 있다면하는 것은 탈출 할 수 있습니다. 이것은 모든 MySQL의 문자열 비교 함수에 설명되어 있습니다. 예를 들어 SQL 아래의 1을 반환합니다 :

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

    \\\\와 % 문자로 이스케이프 할 필요가 단일 백 슬래시 탈출했다 : \ %를.

  3. ==============================

    3.이것은 텍스트 인덱싱 문제입니다. 내가 바로 그것을 얻을 경우, 당신의 작업은 자유 형식의 텍스트에있는 사람들에 대한 모든 참조를 찾을 수 있으며, LIKE 또는 NOT LIKE과는 아무 상관이 없습니다.

    이것은 텍스트 인덱싱 문제입니다. 내가 바로 그것을 얻을 경우, 당신의 작업은 자유 형식의 텍스트에있는 사람들에 대한 모든 참조를 찾을 수 있으며, LIKE 또는 NOT LIKE과는 아무 상관이 없습니다.

    일반적인 형태로, 당신은 참조를 찾고있는에 대한 데이터베이스 테이블 일부 텍스트 인덱싱 알고리즘에 대한 사전의 역할을합니다. 이 사전을 사용하여 입력 문자열에 인덱스를 구축하고 희망 당신은 어떤 일치를 얻을 것이다.

  4. from https://stackoverflow.com/questions/472063/mysql-what-is-a-reverse-version-of-like by cc-by-sa and MIT license