2010-07-01 5 views
0

내가 변수가 저장 프로 시저에 전달했다 예 :SQL 검색 열이

@keywords = 'val1, val3, val5' 

그리고 난 열라는 제목이 그들 중 하나를 포함하고 있는지 확인하기 위해 노력하고있어

Ex: Title1 - 'Hello val1' 
    Title2 - 'Hello val3' 
    Title3 - 'Hello val1, val3' 
    Title4 - 'Hello' 

SO 내 결과를 반환해야합니다 값

Title 
------ 
Hello val1 
Hello val3 
Hello val1, val3 

는 LIKE 또는 OT를 사용이 가능 그녀의 기능/방법?

답변

4

CSV를 행으로 분할해야합니다 (다양한 기술에 대해서는 Arrays and Lists in SQL Server 2005 and Beyond 참조). 난 당신이 그런 그런데

SELECT * 
FROM 
    MYtable M 
    JOIN 
    dbo.ufnSplitRows (@CSV) C ON M.Title LIKE '%' + C.SplitValue + '%' 

LIKE 사용하여 가입이

에 따라 dbo.ufnSplitRows을 작성, 당신이 할 경우 적어도

+0

내 문제를 해결했습니다. –

+0

+1 세심한 Erland Sommerskog를 참조하십시오. :-) – Anon246

+0

이 dbo.ufnSplitRows는 무엇입니까? –

2

때문에 최고의 '%'의 제대로 실행됩니다 가정합니다 질의 문자열이 저장되는 방법에 대한 몇 가지 가정, 그렇다면 (매우 효율적이지는 않지만) 그래 :

가정 : 문자열은 쉼표로 구분 된 모든 항목과 함께 저장되고 공백으로 저장됩니다. (귀하의 질문에 게시 한 내용입니다)

select * from YourTable where 
    (@keywords like KeyColumn + ', %') or 
    (@keywords like '%, ' + KeyColumn + ', %') or 
    (@keywords like '%, ' + KeyColumn) 
+0

문자열 조건의 선두 + 끝/끝이 필요합니다. – gbn

+1

@gbn : 감사합니다. 나는 그것을 게시 한 직후에 이미 정정하기 시작했다. –

+1

예, 지금 내가 예상했던 것처럼 추악합니다 :-) – gbn