sql-запрос с несколькими поисковыми словами

#sql #sql-server #sql-server-2005 #tsql

#sql #sql-сервер #sql-server-2005 #tsql

Вопрос:

я использую следующий запрос, чтобы получить все данные, которые содержат несколько слов (которые разделяются функцией) в столбце name таблицы inventoryLocalization.

в примере я разделил строку «красный зеленый синий». как и должно быть, он вернул все строки, подобные оператору OR.

 SELECT distinct 
inL.name
FROM dbo.[inventoryLocalization] inL
JOIN fnSplitString (N'red green blue',' ' ) words ON (inL.name LIKE '%'  words.item  '%')
  

Мой вопрос в том, возможно ли получить строки, содержащие все слова, как в операторе And.

Ответ №1:

 select inL.name from dbo.[inventoryLocalization] inL 
where not exists
    (select 1 from fnSplitString(N'red green blue',' ') words 
    where (inL.name NOT LIKE '%'  words.item  '%'))
  

Ответ №2:

Попробуйте что-то вроде этого:

 DECLARE @SomeWords NVARCHAR(200), @Num INT

SET @SomeWords = 'red green blue'

SELECT @Num = COUNT(*)
FROM fnSplitString (@SomeWords,' ')

SELECT inL.name
FROM dbo.[inventoryLocalization] inL
JOIN fnSplitString (@SomeWords,' ' )words 
ON (inL.name LIKE '%'  words.item  '%')
GROUP BY inL.name
HAVING COUNT(*) = @Num