SQL Server 2008 R2:准备动态 WILDCARD
SQL Server 2008 R2: Prepare dynamic WILDCARD
我有以下 table Test_01
两列,即 Cola
和 Colb
。
我有一种情况,我需要将 LIKE
和 IN
用于多个值。
Table:
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%' ;
我正在使用 table 变量来解析变量 @a 值并将它们存储为行。
检查在 main table test_01 和 table 变量之间使用 inner join with like 查看是否有任何匹配的记录。
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+'%'
我有以下 table Test_01
两列,即 Cola
和 Colb
。
我有一种情况,我需要将 LIKE
和 IN
用于多个值。
Table:
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%' ;
我正在使用 table 变量来解析变量 @a 值并将它们存储为行。 检查在 main table test_01 和 table 变量之间使用 inner join with like 查看是否有任何匹配的记录。
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+'%'