代码之家  ›  专栏  ›  技术社区  ›  Ash Machine

T-SQL模式匹配

  •  0
  • Ash Machine  · 技术社区  · 16 年前

    我正试图通过在另一个表中使用“多值”管道分隔列作为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 回复  |  直到 16 年前
        1
  •  1
  •   James    16 年前

    您可以使用拆分的UDF并将其连接到主查询。看到这个 link 代码和示例。您的查询结果将如下所示。这是未经测试的,但希望这能为您指明正确的方向。

    Select A.* from Users A JOIN dbo.Fn_Split(@ValueArrayString, '|') B on A.FirstName = B.value 
    
        2
  •  2
  •   MrTelly    16 年前

    怎么样

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

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

        3
  •  1
  •   Metalogic    14 年前

    我喜欢泰利先生的解决方案。然而,它只处理一半的误报。 完整的解决方案如下:

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

    管道两端需加设

        4
  •  0
  •   dwc    16 年前

    查看patindex()函数。它有点有限,但应该做你想要的。

        5
  •  0
  •   SAMills    16 年前

    See udf___Txt_SplitTab 来自安德鲁·诺维克

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