我怎样才能得到任何子串是哪一行?

时间:2015-10-30 12:55:03

标签: sql sql-server

我有一个带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)。

非常感谢你。

3 个答案:

答案 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 |
+----+-------+