如何在使用LIKE运算符的地方使用split函数

时间:2015-11-15 16:19:40

标签: sql sql-server

我想在我的查询中使用包含 LIKE 运算符的函数split。

 SELECT * FROM Tbl_News n WHERE n.Date >= @Fromdate AND n.Date <= @Todate 
 AND n.Title LIKE '%' + (SELECT Item FROM dbo.SplitString(@key, ',')) + '%' 

输入n.Title是nvarchar。 但提出这个错误:

  

子查询返回的值超过1。这是不允许的   子查询跟随=,!=,&lt;,&lt; =,&gt;,&gt; =或当子查询用作   表达。

2 个答案:

答案 0 :(得分:2)

尝试使用APPLY

SELECT n.*
FROM Tbl_News n CROSS APPLY
     (SELECT Item FROM dbo.SplitString(@key, ',')) s(item)
WHERE n.Date >= @Fromdate AND
      n.Date <= @Todate AND 
      n.Title LIKE '%' + s.item + '%' ;

如果您关心表现,可以考虑在标题上使用全文索引。

答案 1 :(得分:0)

快速浏览一下,看起来子查询(SELECT Item FROM dbo.SplitString(@key, ','))会给出多个结果 - 我想当@key包含逗号时会这样做。

您不能使用在LIKE子句中返回多个结果的查询 - 也许您不想拆分字符串,或者您想查询每个拆分值 - 在这种情况下,请参阅Gordon的答案。