T-SQL 패턴 매칭
-
23-08-2019 - |
문제
다른 테이블의 "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, '|'))
제휴하지 않습니다 StackOverflow