문제

다른 테이블의 "Multivalue"파이프 구분 열을 WHERE 절로 사용하여 데이터 행의 행을 쿼리하는 방법을 찾으려고 노력하고 있습니다. SQL Server 2005

이것은 문제에 대한 나의 가장 좋은 설명입니다.

파이프 구분 열이 @list = 'Bob | Mary | Joe'와 같은 변수로 설정된 열을 상상해보십시오.

그럼 나는 이와 같은 경기를 찾으려고 노력하고있다

Select * from Users where FirstName = 'Joe'

그러나 확장되었습니다

Select * from Users where FirstName "IS CONTAINED IN" @List

모든 Bob, Mary 및 Joe 항목을 반환합니다. 당신의 도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

분할 UDF를 사용하여 기본 쿼리에 가입 할 수 있습니다. 이것 좀 봐 링크 코드와 예제. 당신의 쿼리는 이렇게 보일 것입니다. 이것은 테스트되지 않았지만 희망적으로 이것은 당신을 올바른 방향으로 가리 킵니다.

Select A.* from Users A JOIN dbo.Fn_Split(@ValueArrayString, '|') B on A.FirstName = B.value 

다른 팁

어때

Select * from Users where CHARINDEX(FirstName + '|', @List + '|') > 0

파이프 구분기를 두 문자열에 추가해야한다는 것이 약간 성가 시지만 작동하지만 기능보다 빠릅니다.

나는 Mrtelly의 솔루션을 좋아합니다. 그러나 그것은 허위 양성의 절반을 돌보고 있습니다. 전체 솔루션은 다음과 같습니다.

Select * from Users where CHARINDEX('|' + FirstName + '|', '|' + @List + '|') > 0

파이프는 양쪽 끝에 추가해야합니다

patindex () 함수를 확인하십시오. 약간 제한적이지만 찾고있는 일을해야합니다.

UDF___TXT_SPLITTAB를 참조하십시오 Andrew Novick에서

Select * from Users where FirstName IN (Select Item From udf_Txt_SplitTAB (@LIST, '|'))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top