2015-10-28 5 views
1

У меня есть следующая таблица Test_01 с двумя колонками, а именно Cola и Colb.SQL Server 2008 R2: Подготовьте динамический WILDCARD

У меня возникла ситуация. Мне нужно использовать LIKE с IN для нескольких значений.

Таблица:

SELECT * FROM Test_01; 

Cola Colb 
------------ 
1  A 
11  B 
22  C 

Пример:

DECLARE @a VARCHAR(max) = 'A,B,C' 
DECLARE @sql VARCHAR(max) = '' 

Мои плохо попробовать: Что не работает

SET @SQL = 'SELECT * from test_01 
     WHERE Colb LIKE IN (''%'+REPLACE(@a,',','%'',''%')+'%'')'; 
PRINT(@sql); 

Наконец, я узнал, что мне нужно подготовить LIKE с условием OR, указав THIS.

Как подготовить динамический WILDCARD, как показано ниже?

SELECT * FROM Test_01 
WHERE 
Colb LIKE '%A%' OR 
Colb LIKE '%B%' OR 
Colb LIKE '%C%' ; 

ответ

2

Я использую переменную таблицы для анализа значений переменной @a и сохраняю их как строки. Проверьте с помощью внутреннего соединения между основной таблицей test_01 и табличной переменной, чтобы увидеть, соответствуют ли какие-либо совпадающие записи.

DECLARE @a VARCHAR(max) = 'A,B,C'; 

declare @tablevariable table 
(
colb varchar(20) 
); 

INSERT INTO @tablevariable 
SELECT Split.a.value('.', 'VARCHAR(100)') AS String 
FROM (SELECT 
     CAST ('<M>' + REPLACE(@a, ',', '</M><M>') + '</M>' AS XML) AS String 
    ) AS A CROSS APPLY String.nodes ('/M') AS Split(a); 


select tb1.* from test_01 tb1 inner join @tablevariable tb2 
on tb1.colb like '%'+tb2.colb+'%' 
+1

Плюс1 Большое вам спасибо. – MAK

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