我在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