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中的子字符串。
我尝试使用 charindex
、substring
、exists
或 like
运算符的组合来寻找解决方案,但没有找到任何解决方案,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 + '%'
假设我的结果集只有一列包含 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中的子字符串。
我尝试使用 charindex
、substring
、exists
或 like
运算符的组合来寻找解决方案,但没有找到任何解决方案,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 + '%'