2011-10-07 2 views
8

테이블에서 두 개의 쿼리를 실행 중입니다.SQL : Like vs Contains - 다른 결과

SELECT MSDS FROM dbo.MSDSSearch3 WHERE CONTAINS(MSDS, 'STYCAST') 

그리고

SELECT MSDS FROM dbo.MSDSSearch3 WHERE MSDS like '%STYCAST%' 

첫 번째 쿼리는

'STYCAST 50300 LV' 

을 반환하고 두 번째는

'STYCAST 50300 LV' 
'STYCAST 2851 BLACK' 

을 누군가가 등보다 더 많은 값을 반환 이유를 알고 있나요 돌아갑니다 포함되어 있습니까? 내가 실행중인 방법에 문제가 있습니까? 미리 감사드립니다.

+0

SQL 서버의 버전은 무엇? 2008 년에는'SELECT * FROM sys.dm_fts_parser (' "STYCAST 2851 BLACK"', 1033, 0,0) 파서에 대한 가시성을 얻을 수 있습니다. 문자열이 다르게 처리되는 이유는 알 수 없습니다. –

+3

흥미로운 질문입니다. 두 값이 완전히 동일합니까? 선행/후행 공백 문자가없는 경우. CONTAINS가 정확히 텍스트와 일치하므로 LIKE가 텍스트 + 양쪽 모두와 일치하므로이 문제가 발생할 수 있습니다. – Purplegoldfish

+11

전체 텍스트 카탈로그가 오래된 것 같습니다. [ALTER FULLTEXT CATALOG] (http://msdn.microsoft.com/en-us/library/ms176095.aspx)를 사용하여 다시 작성하려고 할 수 있습니다. –

답변

2

CONTAINS는 완전히 다른 함수이며, 전체 텍스트 열에 대한 조건부 기반 쿼리입니다. 열에 문자열이 들어 있는지 판별하는 것은 함수가 아닙니다. 실행중인 쿼리

, 당신은이를 사용할 수 있습니다 : 당신이 현재 가지고있는 것처럼

SELECT MSDS FROM dbo.MSDSSearch3 WHERE CONTAINS(MSDS, '"STYCAST*"') 

대신 단순 어로 검색의 접두사 검색이 있습니다.

자세한 내용 : 길에서 어쩌면 http://msdn.microsoft.com/en-us/library/ms187787.aspx


당신이 그것을 'STYCAST 2851 BLACK은'결과에 속하지 않는 텍스트를 사용하고 너무 'STYCAST 50300 LV'가 아닌 또 하나의 성격을 가지고 있기 때문에 그것은 [17 경기 중 7 경기] 대 [7 경기 중 16 경기]입니다. 확실하지는 않지만이 이상한 행동을 설명 할 수 있습니다.

+0

같은 결과로이 솔루션을 테스트했습니다. MSDS FROM dbo.MSDSSearch3 WHERE 포함 (MSDS, ' "STYCAST *"') 여전히 하나의 값이 반환됩니다. – Corey

+0

슬픈 그; 그런 다음 오래된 카탈로그 여야하지만 이미 업데이트했다고합니다. 그것은 매우 이상합니다. – daniloquio

+0

다음을 실행하면 어떻게됩니까? SELECT MSDS FROM dbo.MSDSSearch3 어디에 (MSDS, 'STYCAST 2851 BLACK')? – daniloquio