2015-11-15 1 views
2

Я хочу использовать функцию split в моем запросе, которая содержит LIKE оператор.как использовать функцию разделения в том месте, где используется оператор LIKE

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. но поднять эту ошибку:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

ответ

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 + '%' ; 

Вы могли бы рассмотреть возможность использования полнотекстового индекса по названию, если вы заботитесь о производительности.

+0

ваш код работал.thanks;) – Hoorakhsh

0

На первый взгляд, выглядит как подзапрос (SELECT Item FROM dbo.SplitString(@key, ',')) дает несколько результатов - я предполагаю, что это будет делать, когда @key содержит запятые.

Вы не можете использовать запрос, который возвращает несколько результатов в предложении LIKE - возможно, вы не хотите разделить строку или хотите запросить каждое значение разделения - в этом случае см. Ответ Гордона.

Смежные вопросы