是否可以比较两个字符串并在两者之间找到一个公共值?例如,'Alpha Bravo'
和'Echo Charlie Bravo Delta'
的通用词是'Bravo'
。
在我的场景中,我有两个表在一列中共享相似格式的单词(即Alpha Bravo Charlie Delta Echo),我想查找单词中是否存在相似性,从而满足条件。
感谢任何方向。
答案 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, ' ')
会在拆分的单词之间产生不区分大小写的匹配。
答案 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