Вопрос

Я пытаюсь найти способ запроса строк данных, используя столбец с разделителями «многозначный» канал в другой таблице в качестве предложения WHERE.SQL-СЕРВЕР 2005

Это мое лучшее описание проблемы:

Представьте себе столбец, разделенный вертикальной чертой, которому присвоена переменная типа @LIST = 'Bob|Mary|Joe'.

тогда я пытаюсь найти такое совпадение

Select * from Users where FirstName = 'Joe'

но расширен, чтобы быть

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

который вернет все записи Боба, Мэри и Джо.Спасибо за вашу помощь.

Это было полезно?

Решение

Вы можете использовать разделенный 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. от Эндрю Новика

Select * from Users where FirstName IN (Select Item From udf_Txt_SplitTAB (@LIST, '|'))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top