拆分完整地址以仅包含街道名称

问题描述 投票:0回答:1

我有一个包含地址 1、城市、州和邮政编码的表。但是,某些 address1 还将包含城市、州和邮政编码(用逗号或空格或两者分隔)。示例:

Address1: 9999 western Rd, Los Angeles, CA, 90001
City: Los Angeles
State: CA
Postal: 90001
I want Address1 to be: 9999 western Rd

我尝试了以下 SQL 来修复这些地址:(为了简化,我假设所有字段都不为 null 或为空,在没有州的国家/地区的实际系统中,它将为空或与国家/地区名称相同。)

SELECT LEFT(address1, PATINDEX('%[, ]'+city+'%', billingAddress) - 1)
FROM addresses
WHERE address1 like '%[, ]'+city+'%'+state+'%'+postal_code+'%'
    AND PATINDEX('%[, ]'+City+'%', address1) < 12

这里的问题是许多街道名称都包含它们所在的城市。例如,城市

9999 KIRKLAND WAY
中包含
KIRKLAND
,此查询将导致此查询中剩余的街道名称为
9999

有没有办法在 SQL 中解决这个问题?

sql sql-server string-matching street-address
1个回答
0
投票

您指出

Address1
列包含完整地址,其他列包含各自的值。考虑:

DECLARE @Addresses TABLE (ID INT IDENTITY, Address1 NVARCHAR(200), Address2 NVARCHAR(50), City NVARCHAR(50), State NVARCHAR(50), PostalCode NVARCHAR(10));
INSERT INTO @Addresses (Address1, Address2, City, State, PostalCode) VALUES (N'9999 western Rd, Los Angeles, CA, 90001', NULL, 'Los Angeles', 'CA', '90001');

SELECT *, TRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(Address1, COALESCE(Address2,''), ''), COALESCE(City,''), ''), COALESCE(State,''), ''), COALESCE(PostalCode,''), ''), ',', '')) AS JustAddress1
  FROM @Addresses;
身份证 地址1 地址2 城市 状态 邮政编码 只是地址1
1 9999 西路,洛杉矶,加利福尼亚州,90001 洛杉矶 CA 90001 西路9999号

这基本上只是删除其他列中的值,然后删除逗号。最后它会删除所有前导或尾随空格。

只有假设您的所有地址的列中也有

Address2
City
State
PostalCode
,这才有效。

最后,SQL Server 并不是真正应该用于字符串操作的地方或工具,但我确实理解有时我们会陷入使用次优解决方案的困境。

© www.soinside.com 2019 - 2024. All rights reserved.