Выбор строк на основе списка ВСЕХ (нескольких) значений в столбце, разделенном запятыми, с использованием% до и после для нечеткого соответствия - PullRequest
0 голосов
/ 19 июня 2020

Редактирование по запросу. Мне удалось получить данные из длинной строки в таблицу, поэтому вопрос в какой-то степени изменился.

Мой вопрос в том, как мне получить результаты, полученные на основе совпадения ВСЕХ значений, переданных через запятую. строка с разделителями?

Я могу и использовал STRING_SPLIT. Проблема, с которой я сталкиваюсь, заключается в том, что при использовании строки, разделенной на IN или INNER JOIN или OUTER APPLY или CROSS APPLY, строка возвращается, если какое-либо одно (01) значение в переданной строке значений соответствует значению (значениям) в столбец строки; НЕ ВСЕ значения в строке.

Опять же, важным моментом является то, что возвращаемые строки должны соответствовать ВСЕМ значениям из STRING_SPLIT значений, переданных в символьной строке.

Кроме того, как уже было запрошено, вот пример таблицы, макет кода и ожидаемые результаты:

Код:

DECLARE @VALUES NVARCHAR(100) = 'X,G'

SELECT T5.COL1, T5.COL2, STRING_AGG(TRIM(TABLE1.COL3),', ') AS UNIQUE_STRING_OF_VALUES
FROM [SOME_DB].[dbo].[TABLE1] AS T5 
INNER JOIN STRING_SPLIT(@VALUES, ',') AS T10 ON T10.VALUE = T5.COL3

GROUP BY T5.COL1, T5.COL2
ORDER BY T5.COL1 ASC, T5.COL2 ASC

введите описание изображения здесь

1 Ответ

0 голосов
/ 23 июня 2020

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

declare
    @String             varchar(1000)   =   'This,is,a,test,search,function'
,   @SplitCharacter     varchar(10)     =   ','

select
*
from    string_split(@String,@SplitCharacter)

Это разбивает строки в следующем формате:

Results1

Now when you alter the script like this, you can search for particular fields in the splits:

declare
    @String             varchar(1000)   =   'This,is,a,test,search,function'
,   @SplitCharacter     varchar(10)     =   ','

select
*
from    string_split(@String,@SplitCharacter)
where   Value like '%sea%'

This gives you the following results:

Results2

See DEMO

Сообщите мне, работает ли это ...

...