如何解决如何仅显示字符串之间根本不匹配的行?
我必须比较两列,并且只能提取字符串之间甚至没有部分匹配的行。例如,我有这个表:
Col1 | Col2 |
---|---|
约翰·史密斯 | 约翰史密斯有限公司 |
胡椒排 | 任何辣椒 |
红色 | 蓝色 |
过滤后我应该看到的唯一一行是最后一行:
Col1 | Col2 |
---|---|
红色 | 蓝色 |
我找到了一个答案 here,其中显示了部分匹配的结果。我尝试使用 NOT LIKE
将其修改为仅返回 0 个匹配项,但没有成功。
解决方法
如果您想要没有单词重叠的行,您可以使用 not exists
子句:
select t.*
from t
where not exists (select 1
from string_split(t.col1,' ') s1 join
string_split(t.col2,' ') s2
on s1.value = s2.value
);
注意:此公式允许您返回整行 -- 即未包含在比较中的其他列。
如果您使用的是不支持 string_split()
的旧版 SQL Server,我建议您查找执行相同操作的用户定义函数的代码。
如果您只想拆分 col1 单词并想检查它是否存在于 col2 中,为此您可以尝试如下操作。
select col1,col2 from mytable
except
select col1,col2 from mytable t
cross apply
(
select * from string_split(t.Col1,' ')
)x
where col2 like '%' + [value] + '%'
注意:string_split
将适用于 SQL Server 2017+,如果您使用的是旧版本,则需要使用一些自定义拆分功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。