我试图通过在另一个表中使用“多值”管道分隔列作为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条目。谢谢你的帮助。
答案 0 :(得分:2)
怎么样
Select * from Users where CHARINDEX(FirstName + '|', @List + '|') > 0
有点烦人,你必须将管道分隔符附加到两个字符串,但是它可以工作,并且它可能比函数更快。
答案 1 :(得分:1)
您可以使用拆分udf并将其加入主查询。请参阅此link以获取代码和示例。您的查询最终会看起来像这样。这是未经测试的,但希望这可以指出你正确的方向。
Select A.* from Users A JOIN dbo.Fn_Split(@ValueArrayString, '|') B on A.FirstName = B.value
答案 2 :(得分:1)
我喜欢MrTelly的解决方案。然而,它只照顾了一半的假阳性。 完整的解决方案如下:
Select * from Users where CHARINDEX('|' + FirstName + '|', '|' + @List + '|') > 0
需要在两端添加管道
答案 3 :(得分:0)
查看PATINDEX()函数。它有点受限,但它应该做你想要的。
答案 4 :(得分:0)
Select * from Users where FirstName IN (Select Item From udf_Txt_SplitTAB (@LIST, '|'))