2010-07-01 100 views
0

我有一个变量传递到存储过程 例:SQL搜索栏

@keywords = 'val1, val3, val5' 

而且我想看看是否指定的列标题包含在它其中的任何

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

所以我的结果应该返回值

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

这是可能使用LIKE或任何OT她的功能/方法?

回答

4

您需要将CSV分成若干行(关于variuos技术,请参见Arrays and Lists in SQL Server 2005 and Beyond)。我假设你在此基础上

创建dbo.ufnSplitRows再加入使用像

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

顺便说一句,它会运行不佳,因为领先的“%”至少

+0

这解决了我的问题,谢谢! – 2010-07-01 19:00:07

+0

+1用于引用精心的Erland Sommerskog。 :-) – Anon246 2010-07-01 19:03:22

+0

这是什么dbo.ufnSplitRows? – 2012-02-09 07:56:49

2

如果您关于如何存储查询字符串的一些假设,然后是(虽然效率不是很高):

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

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

你需要领先的%太+字符串条件的开始/结束 – gbn 2010-07-01 18:52:04

+1

@gbn:谢谢;我发布后我已经开始纠正。 – 2010-07-01 18:54:29

+1

是的,现在它和我想象的一样丑陋:-) – gbn 2010-07-01 18:57:10