我有一个带varchar(max)的表。我想知道是否可以从列表中获取包含任何子字符串的所有行。
我知道,对于一个值,我可以使用'AAA%',但我不知道是否有任何方式可以说出IN()的位置。
这样的事情:
select * from TableA where
TableA.Field1 contains any (select Fild1 from TableB where field2 > 5);
TableA.Field 1和TableB.Field1是varchar(max)。
非常感谢你。
答案 0 :(得分:2)
select * from TableA
where exists (select 1 from TableB
where TableA.Field1 like '%' + TableB.Fild1 + '%'
and TableB.field2 > 5)
答案 1 :(得分:1)
SQL Server包含CONTAINS函数,所以这样的东西可以正常工作。
SELECT *
FROM TableA
JOIN TableB ON CONTAINS(TableA.Field1, TableB.Fild1) AND TableB.field2 > 5
您可能需要根据自己的要求进行调整。
以下是包含的文档 https://msdn.microsoft.com/en-us/library/ms187787.aspx
答案 2 :(得分:0)
您可以使用动态SQL查询。
<强>查询强>
declare @query varchar(max)
select @query = 'select * from t1 where ' +
STUFF
(
(
select ' OR col1 like ''' + col1 + '%'''
from t2
for xml path('')
),
1,4,'');
execute(@query);
表格 - t1
+----+-------+
| id | col1 |
+----+-------+
| 1 | AAAAA |
| 2 | BBBBB |
| 3 | CCCCC |
| 4 | DDDDD |
| 5 | EEEEE |
+----+-------+
表格 - t2
+------+
| col1 |
+------+
| AA |
| BB |
| CC |
+------+
<强>输出强>
+----+-------+
| id | col1 |
+----+-------+
| 1 | AAAAA |
| 2 | BBBBB |
| 3 | CCCCC |
+----+-------+