我想在我的查询中使用包含 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; =或当子查询用作 表达。
答案 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的答案。