CSV字符串中每个变量的SQL搜索列

时间:2010-07-01 18:42:07

标签: sql sql-server sql-server-2005 tsql

我有一个传递给存储过程的变量 例如:

@keywords = 'val1, val3, val5'

我正在尝试查看名为Title的列是否包含其中任何一个

Ex: Title1 - 'Hello val1'
    Title2 - 'Hello val3'   
    Title3 - 'Hello val1, val3'  
    Title4 - 'Hello' 

所以我的结果应该返回值

Title
------
Hello val1
Hello val3
Hello val1, val3

这可以使用LIKE或任何其他功能/方法吗?

2 个答案:

答案 0 :(得分:4)

您需要将CSV拆分为行(有关variuos技术的信息,请参阅Arrays and Lists in SQL Server 2005 and Beyond)。我假设您根据此

创建dbo.ufnSplitRows

然后使用LIKE

加入
SELECT *
FROM
    MYtable M
    JOIN
    dbo.ufnSplitRows (@CSV) C ON M.Title LIKE '%' + C.SplitValue + '%'

顺便说一下,由于领先的'%'至少

,它将运行不佳

答案 1 :(得分:2)

如果你对查询字符串的存储方式做了一些假设,那么肯定(虽然效率不高):

假设:字符串将与每个以逗号分隔的项目存储,然后存储空格。 (这是你在问题中发布的内容)

select * from YourTable where 
    (@keywords like KeyColumn + ', %') or
    (@keywords like '%, ' + KeyColumn + ', %') or
    (@keywords like '%, ' + KeyColumn)