MS SQL 服务器上是否有用于动态列表或多个字符串集的 LIKE 运算符?

Is there a LIKE operator for a dynamic list or set of multiple strings on MS SQL Server?

假设我的结果集只有一列包含 substrings:

表 1:

substrings
-----------
substringa
substringb
substringc
substringd
substringe
etc.
-----------

我有另一个查询的第二个结果集:

表 2:

id      | comment
-------------------------------------------------------------------------------
0001    | A text containing substringa
0002    | A text containing substringd
0003    | A text containing none of the substrings from Table1
0004    | Another text containing substringa
0005    | A text containing substringb
...     | etc.
-------------------------------------------------------------------------------

我想要 return 第三个 table 表 3,其中包含表 2 中的行,其中注释包含表 1 中存在的任何 substrings,包括具有现有行的另一列substrings 本身,即:

表 3:

id      | comment                                | substrings
-------------------------------------------------------------------------------
0001    | A text containing substringa           | substringa
0002    | A text containing substringd           | substringd
0004    | Another text containing substringa     | substringa
0005    | A text containing substringb           | substringb
...     | etc.                                   | ...
-------------------------------------------------------------------------------

可以假设Table2中的所有评论恰好包含零个或一个Table1中的子字符串。 我尝试使用 charindexsubstringexistslike 运算符的组合来寻找解决方案,但没有找到任何解决方案,MS SQL服务器没有我所知道的 suitable regexp 运算符。是否有类似于 like 运算符的东西来检查 MS SQL 服务器上的多个字符串,或者是否有更好的方法来执行此操作?表 1 中 substrings 的大小是 10^2-10^3 的顺序并且是动态变化的,所以我不能像 this post.

中描述的那样硬编码

一个解决方案是使用 CHARINDEX() 检查一个字符串是否包含另一个字符串:

SELECT t2.*, t1.substring
FROM table2 t2
INNER JOIN table1 t1 ON CHARINDEX(t1.substring, t2.comment) > 0

如果您还想查看没有匹配子字符串的评论,您可以使用 LEFT JOIN 而不是 INNER JOIN

LIKE 也能完成工作:

SELECT t2.*, t1.substring
FROM table2 t2
INNER JOIN table1 t1 ON t2.comment LIKE CONCAT('%', t1.substring, '%')

您可以尝试使用此查询:

SELECT t2.*, t1.substring
FROM table2 t2
INNER JOIN table1 t1 ON t2.comment LIKE '%' + t1.substring + '%'