2017-02-07 1 views
0

나는 이것에 대한 해답을 찾기 위해 하루 종일을 보냈고 3 가지 다른 검색 엔진 변형 후에는 불가능하다는 사실을 스스로 해결했습니다. 여기 내 문제가있다. 프린터 모델 번호 표를 검색해야합니다. 프린터 모델이 표준화되지 않았기 때문에 모델의 다른 부분이 다른 순서로있을 수 있습니다.SQL - 임의의 순서로 정확한 단어 일치 검색

HP 오피스젯 프로 8715

HP 오피스젯 8715 프로

모두 분명히 동일한 프린터를하지만 그들은 우리와 공급 업체 사이의 공유 DB의 두 가지 방법으로 표시됩니다. 예를 들어 HP OfficeJet Pro 8715을 검색하면 HP OfficeJet 8715 Pro도 반환되지만 HP OfficeJet Pro 8715dw을 반환하지 않아야합니다.

요약하면 단어의 순서는 다를 수 있지만 단어가 정확히 일치해야합니다.

나는 이미 검색 문자열을 #temp 테이블로 구문 분석하여 각 행에 단어가 있으며 이것이 결과를 찾기 위해 비교 한 방법입니다.

INSERT INTO #results 
    SELECT Make, Model 
    FROM tDevices 
     WHERE (Make LIKE '%' + @MAKE + '%') AND (Model LIKE '%' + @MODEL + '%') AND (Model LIKE '%' + @MODEL2 + '%') 

여기서 각 모델 변수는 모델의 다른 단어입니다. 이것은 잘 작동하지만, 반환 HP 오피스젯 8715 프로뿐만 아니라 HP 오피스젯 프로 8715dw로

이 가능합니까? 그것은 8715dw 반환

감사

+2

을 사용하는 DBMS? –

+0

'Make '가 항상 시작 부분에 있다면'Model'에서 단어 순서의 모든 순열에 대해 명시 적으로 검사하면됩니까? – shash678

+0

대답 할 수 있습니까? 결국 우리에게 가장 좋은 솔루션이되었습니다. –

답변

0

의 % (아무것도 연산자)를 할 수 있기 때문이다. 이 %의없이

시도 : (https://stackoverflow.com/a/14291100/510788 기준)

INSERT INTO #results 
    SELECT Make, Model 
    FROM tDevices 
     WHERE (Make LIKE @MAKE) AND (Model LIKE @MODEL) AND (Model LIKE @MODEL2) 

업데이트 : 당신이

SELECT * FROM 
    (SELECT Make, CONCAT(' ', REPLACE(Model,' ',' '), ' ') AS Model FROM tDevices) t 
WHERE 
    Make LIKE '%hp%' AND (
     Model LIKE '% 8715 %' OR 
     Model LIKE '% pro %' AND 
     (REPLACE(REPLACE(Model, 
     ' 8715 ',''), 
     ' pro ','')) = '' 
    ) 
+0

% s이 없으면 더 이상 모델의 위치를 ​​무시하지 않습니다. –

+0

네,하지만 생각 못했습니다. 죄송합니다. 더 나은 해결책을 찾으려면 내 업데이트를 참조하십시오. –

+0

매우 흥미 롭습니다. (검색에 추가 단어가 포함되는 것처럼 보이므로) 전체적인 문제를 해결하지는 못 하겠지만 요점을 확인하고 정확히 첫 번째 부분에 필요한 부분입니다. 고맙습니다! 나는 그것을 얻고 답을 얻어 맞힐 것이다! –

관련 문제