0

我试图找到一种方法来通过使用另一个表中的“多值”管道分隔列作为 WHERE 子句来查询数据行。SQL 服务器 2005

这是我对问题的最佳描述:

想象一个用管道分隔的列设置为像 @LIST = 'Bob|Mary|Joe' 这样的变量

然后我试图找到这样的匹配

Select * from Users where FirstName = 'Joe'

但扩展为

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

这将返回所有 Bob、Mary 和 Joe 条目。谢谢你的帮助。

4

5 回答 5

2

怎么样

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

有点烦人,您必须将管道分隔符附加到两个字符串,但它可以工作,而且它可能比函数更快。

于 2009-02-13T01:54:40.927 回答
1

您可以使用拆分 udf 并将其加入主查询。请参阅此链接以获取代码和示例。您的查询最终看起来像这样。这是未经测试的,但希望这能为您指明正确的方向。

Select A.* from Users A JOIN dbo.Fn_Split(@ValueArrayString, '|') B on A.FirstName = B.value 
于 2009-02-13T01:46:16.080 回答
1

我喜欢 MrTelly 的解决方案。但是,它只处理了一半的误报。完整的解决方案如下:

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

需要在两端添加管道

于 2010-10-25T23:56:38.563 回答
0

查看 PATINDEX() 函数。它有点有限,但它应该可以满足您的需求。

于 2009-02-13T01:31:44.537 回答
0

参见Andrew Novick 的udf___Txt_SplitTab

Select * from Users where FirstName IN (Select Item From udf_Txt_SplitTAB (@LIST, '|'))
于 2009-02-13T01:49:44.637 回答