#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