如何比较两列以查看两者上是不是存在相同的文本

Posted

技术标签:

【中文标题】如何比较两列以查看两者上是不是存在相同的文本【英文标题】:How to compare two columns for to see if the same text is present on both如何比较两列以查看两者上是否存在相同的文本 【发布时间】:2021-12-02 16:08:30 【问题描述】:

我正在使用 SSMS v18.2。

我正在比较一些乱七八糟的地址,看看它们是否基本相同。我收到地址为 4 个单独的列,地址 Line1、Address Line2、Address Line3 和 Address Line4。我正在尝试将该地址与手动输入的地址进行比较。通常,地址是相似的,但手动输入的地址可能有拼写错误或者是完整地址的缩短版本。我已将 AddressLine 1 到 4 连接成一个字符串并删除了所有空格:

REPLACE(CONCAT(AddressLine1,AddressLine2,AddressLine3,AddressLine4),' ','') AS CorrectedAddress

然后我尝试将此地址与我整理过的手动输入的地址进行比较:

REPLACE(ManualAddress,' ','') AS TidyManualAddress

我正在尝试找出比较两者的最佳方法。基本上,我想说的是,如果 TidyManual 地址中的文本出现在 CorrectedAddress 中的任何位置,则 Y 否则 N。

我尝试了以下方法:

CASE WHEN SUBSTRING(TidyManualAddress,1,8) = SUBSTRING(CorrectedAddress,1,8) THEN 'Y' ELSE 'N' END AS AddressMatch

但是substring函数中8个字符的选择只是任意选择。

有没有一种方法可以比较两列以查看一列中的字符串是否在另一列中找到?

例如,如果我的 CorrectedAddress 是 MovingPlace,MadeUpTown,SomeCountry 并且我的 ManualAddress 是 MovingPlace,我'想要返回是,因为在第一列的字符串中找到了 MovingPlace。我的问题显然是每个字符串的文本长度不同。

【问题讨论】:

样本数据对您的问题有很大帮助。 类似的东西:SQL CASE WHEN CorrectedAddress LIKE '%' + TidyManualAddress+ '%' THEN 'Y' ELSE 'N' END AS AddressMatch ? 【参考方案1】:

使用CHARINDEX():

SELECT
  CASE
    WHEN CHARINDEX(TidyManual, CorrectedAddress) = 0 THEN 'N'
    ELSE 'Y'
  END AS MATCH

【讨论】:

以上是关于如何比较两列以查看两者上是不是存在相同的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何比较两列之间的字符,并使用宏突出显示相同的单元格

如何比较两列之间的值是不是具有相同的数字〜熊猫

如何比较数据框中的两列,检查它们之前是不是存在?

我想比较具有不同日期格式的两列

如何组合两列以使第三列按方法从组中获取属性?

如何检查两列是不是相同/相等?