我有以下表格Test_01
,其中有两列Cola
和Colb
。
我有一种情况是我需要使用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);
最后,我开始知道我需要通过引用THIS来准备LIKE
OR
条件。
如何准备动态WILDCARD,如下所示?
SELECT * FROM Test_01
WHERE
Colb LIKE '%A%' OR
Colb LIKE '%B%' OR
Colb LIKE '%C%' ;
答案 0 :(得分: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+'%'