T-SQL模式匹配

时间:2009-02-13 01:14:01

标签: sql tsql pattern-matching sql-like

我试图通过在另一个表中使用“多值”管道分隔列作为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条目。谢谢你的帮助。

5 个答案:

答案 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)

来自Andrew Novick的

See udf___Txt_SplitTab

Select * from Users where FirstName IN (Select Item From udf_Txt_SplitTAB (@LIST, '|'))
相关问题