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



我在SSMS v18.2中工作。

我正在比较一些杂乱的地址,看看它们是否本质上是相同的。我接收地址作为4个单独的列,地址Line1,地址Line2,地址Line3和地址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

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

是否有一种方法来比较两列,看看是否从一个列的字符串被发现在另一个?

作为一个例子,如果我的CorrectedAddress是MovingPlace,MadeUpTown, someecountry我的ManualAddress是MovingPlace,我想返回一个yes,因为MovingPlace在第一列的字符串中找到。我的问题显然是每个字符串的文本长度不同。

使用CHARINDEX():

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

最新更新