MsSql, где имя поля IN LIKE (LIST) - PullRequest
3 голосов
/ 03 мая 2011

Я долго искал и, к сожалению, не могу найти решение для этого.

В основном у меня есть строка ключевых слов с разделителями-запятыми, которые я успешно преобразовал в список с помощью функциикоторая принимает @String и возвращает TABLE (значение varchar (30)).Пока все хорошо.

Теперь я могу использовать этот список в предложении where следующим образом:

SELECT project.*
FROM Projects project 
WHERE project.title IN (SELECT * FROM dbo.ParamsToList('.net,test'))

Это соответствует, когда project.title точно (равно) любому из ключевых слов(.net или test).

То, что мне нужно, это совпадение с названием LIKE "%" + any-keyword + "%".

Любая помощь будет принята с благодарностью.

Спасибо

Ответы [ 2 ]

5 голосов
/ 03 мая 2011

Один путь такой:

SELECT project.*
FROM Projects project 
WHERE EXISTS
    (
        SELECT * FROM dbo.ParamsToList('.net,test') x 
        WHERE project.title LIKE '%' + x.value + '%'
    )

Этот подход будет означать, что один и тот же проект не будет возвращен несколько раз, если проект соответствует нескольким значениям из списка параметров.

2 голосов
/ 03 мая 2011

Вы пробовали JOINING результаты этой функции

SELECT DISTINCT project.*
FROM   Projects project
       INNER JOIN dbo.ParamsToList('.net,test') pl ON project.title LIKE '%' + pl.Value + '%'
...