【发布时间】:2019-06-26 19:07:48
【问题描述】:
我正在比较两个表以匹配它们的地址行和邮政编码。但是,有时邮政编码(美国)的格式为 28272-0516,而在其他情况下只有 28272。无论短划线“-”后面的尾随如何,它们都应该正确匹配。
在 SQL Server 17 中,我使用 CharIndex 来定位破折号“-”但是遇到了问题,因为并非所有邮政编码都包含破折号。
你认为我需要一些 UNION 来获取表 a 中不包含破折号的所有邮政编码,然后是包含破折号的邮政编码,然后是包含破折号的表 b 等等。
SELECT *
from a
inner join b
on
AND a.addressline1 = b.addressline1
AND LTRIM(TRIM(LEFT(a.PostalCode,CHARINDEX('-',a.PostalCode)-1))) = LTRIM(TRIM(LEFT(b.VendorPostalCode,CHARINDEX('-',b.VendorPostalCode)-1)))
【问题讨论】:
-
为什么不简单地 left(ZipCode,5) = left(OtherZipCode,5)
-
仅供参考 - 2017 允许 trim(...) 与 ltrim(rtrim(...))
-
好主意让我试一试,我想多了
-
发生在我们所有人身上:)
-
嗨。请在代码问题中提供minimal reproducible example--cut & paste & runnable code;具有期望和实际输出的示例输入(包括逐字错误消息);标签和明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不可以。 (调试基础。)
标签: sql sql-server join