比较两个字符串的共同价值

时间:2020-03-13 17:16:20

标签: sql sql-server

是否可以比较两个字符串并在两者之间找到一个公共值?例如,'Alpha Bravo''Echo Charlie Bravo Delta'的通用词是'Bravo'

在我的场景中,我有两个表在一列中共享相似格式的单词(即Alpha Bravo Charlie Delta Echo),我想查找单词中是否存在相似性,从而满足条件。

感谢任何方向。

2 个答案:

答案 0 :(得分:1)

如果您的数据库版本是2016+,则可以创建包含STRING_SPLIT()函数的查询,每个表旁边带有CROSS APPLY,然后通过INTERSECT运算符过滤常见值:< / p>

SELECT value
  FROM tab1  
 CROSS APPLY STRING_SPLIT(str, ' ')
INTERSECT
SELECT value
  FROM tab2 
 CROSS APPLY STRING_SPLIT(str, ' ')

Demo

会在拆分的单词之间产生不区分大小写的匹配。

答案 1 :(得分:0)

这应该可以,但是我强烈建议不要在生产环境中部署类似的东西,除非您的表非常小。但这值得发布,因为它可以帮助您找到合适的解决方案。

SPLIT_STRING返回一个单列表(列名称为[value]),该表包含单词列表(请参阅https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15)。该列与使用LIKE的第一个表结合在一起(请参见CROSS APPLY块)。

-- Declare test tables
DECLARE @TABLE1 table([TEXT] varchar(1000))
DECLARE @TABLE2 table([TEXT] varchar(1000))

-- Populate tables
INSERT INTO @TABLE1
VALUES ('alpha bravo charlie'), ('delta echo lima'), ('golf hotel india'), ('tango uniform victor')

INSERT INTO @TABLE2
VALUES ('alpha lima'), ('tango')

-- Query
SELECT DISTINCT T1.[TEXT]
FROM @TABLE1 T1
INNER JOIN @TABLE2 T2 ON 1 = 1
CROSS APPLY (SELECT * FROM STRING_SPLIT([T2].[TEXT], ' ') T3 WHERE T1.[TEXT] LIKE '%' + T3.value + '%') AS T3
相关问题