2016-09-23 1 views
0

문자열에 포함 된 열의 테이블을 쿼리하는 방법을 알아낼 수 없습니다.MySQL 어디 문자열이 문자열에 포함 된

테이블 회사 : 나는 시도

id | title 
---------- 
1 | abc 
2 | abcd 
3 | bcde 
4 | xyfa 

:

SELECT * FROM companies WHERE CONTAINS("ABCDEFG Ltd", title) 

SELECT * FROM companies WHERE CONCAT("%", title, "%") LIKE "ABCDEFG Ltd" 

싶습니다 반환합니다 :

id | title 
---------- 
1 | abc 
2 | abcd 
3 | bcde 
+0

'CONTAINS()'버전은 (MySQL의 기본 기능이 아니기 때문에 그 이름의 사용자 정의 함수를 생성하지 않았다면) 오류를 던질 것입니다. 'LIKE' 비교를 사용하는 쿼리가 실행되지만 모든 행을 반환하지는 않습니다. 'title' 칼럼에 어떤 값이 있는지는 중요하지 않습니다. 비교에서는 결코 리터럴 문자열''ABC ... ''의 첫 문자로 리터럴 퍼센트 문자''% ''를 찾지 않을 것입니다. (백분율 문자는 LIKE 비교의 오른쪽 *에있는 문자열에 * 와일드 카드 *로만 표시됩니다.) – spencer7593

답변

1

난 당신이 찾고있는 생각 :

SELECT * 
FROM companies 
WHERE 'ABCDEFG Ltd' LIKE CONCAT('%', title, '%'); 

즉, 패턴은 양쪽에 와일드 카드가있는 title에 있습니다. 회사 이름과 일치하는지 알고 싶습니다.

1

고든의 대답에 대한 대안은 WHERE 조건 가능한 경우에 호출하지만, LIKE 및/또는 오른쪽에 필드를 넣어

WHERE INSTR(title, 'ABCDEFG Ltd') <> 0

일반적으로, 나는 기능에 대해 추천 기능 INSTRCONCAT 그것은 나쁘다. 그러나이 경우에는 하나 또는 다른 것이 불가피합니다. 어느 버전이 더 빨라질 지 확실히 말할 수는 없지만 둘 다 시도해야합니다. 나는 같을 것이다. 광산일지도 모른다. 비슷한 concat는 아마도 문자열 복사본을 포함 할 것이기 때문에; INSTR 에만 비교가 필요합니다. 그러나 MySQL에서는 항상 명확하지 않습니다.

관련 문제