SQL地址数据很乱,如何在查询中清理它?

我将地址数据存储在sql server 2000数据库中,我需要提取给定客户代码的所有地址。 问题是,有很多拼写错误的地址,一些缺少部分等,所以我需要以某种方式清理它。 我需要除去不好的拼写,缺少的部分等,并拿出“平均”记录。 例如,如果纽约在5个记录中有4个拼写正确,那应该是返回的值。

我无法修改数据,在输入时验证它,或者类似的东西。 我只能修改数据的副本,或者通过查询来处理它。

我在这里得到了部分答案存储在SQL Server中的地址有很多小的变化(错误),但是我需要为每个代码允许多个有效地址。

样本数据

Code    Name                       Address1                      Address2           City            State          Zip     TimesUsed
10003   AMERICAN NUTRITON INC     2183 BALL STREET                                 OLDEN           Utah           87401     177
10003   AMEICAN NUTRITION INC     2183 BALL STREET              PO BOX 1504        OLDEN           Utah           87402     76
10003   AMERICAN NUTRITION INC    2183 BALL STREET                                 OLDEN           Utah           87402     24
10003   AMERICAN NUTRITION INC    2183 BALL STREET              PO BOX 1504        OLDEN           Utah           87402     17
10003   Samantha Brooks           506 S. Main Street                               Ellensburg      Washington     98296     1
10003   BEMIS COMPANY             1401 W. FOURTH PLAIN BLVD.                       VANCOUVER       Washington     98660     1
10003   CEI                       597 VANDYRE BOULEVARD                            WRIGHTSTOWN     Wisconsin      54180     1
10003   Pacific Pet               28th Avenue                                      OLDEN           Utah           84401     1
10003   PETSMART, INC.            16091 NORTH 25TH STREET                          PHOENA         Arizona        85027      1
10003   THE PET FIRM              16418 NORTH 37TH STREET                          PHOENA         Arizona        85503      1

期望的输出

Code    Name                      Address1                      Address2           City            State          Zip     
10003   AMERICAN NUTRITION INC    2183 BALL AVENUE                                 Olden           Utah           84401
10003   Samantha Brooks             506 S. Main Street                               Ellensburg      Washington     98296 
10003   BEMIS COMPANY             1401 W. FOURTH PLAIN BLVD.                       VANCOUVER       Washington     98660
10003   CEI                       975 VANDYKE ROAD                                 WRIGHTSTOWN     Wisconsin      54180
10003   Pacific Pet               29th Street                                      OGDEN           Utah           84401
10003   PETSMART, INC.            16091 NORTH 25TH AVENUE                          PHOENA         Arizona        85027
10003   THE PET FIRM              16418 NORTH 37TH STREET                          PHOENA         Arizona        85503

最好的解决方案是使用CASS认证的地址标准化程序或服务来格式化和验证地址。 除了拥有此工具的USPS之外,还有许多第三方程序或服务提供此功能。 地址解析比你想象的要复杂得多,因此试图掀起一些查询来解决这个问题将会充满危险。

谷歌的地理编码是另一个地方看。显然谷歌要求你显示结果使用他们的地理编码服务。 这留下了使用像USPS或第三方程序这样的专用地址解析器。


使用soundex(name)组,您将得到像这样的结果。 您必须测试您的数据以确定这是否有助于您的情况。 我无法在SQL Server 2000上测试这个,所以我不确定soundex是否可用。

declare @T table (Code char(5), Name varchar(50), Address1 varchar(50))
insert into @T values
('10003', 'AMERICAN NUTRITON INC',  '2183 BALL STREET'),
('10003', 'AMEICAN NUTRITION INC',  '2183 BALL STREET'),
('10003', 'AMERICAN NUTRITION INC', '2183 BALL STREET'),
('10003', 'AMERICAN NUTRITION INC', '2183 BALL STREET'),
('10003', 'Samantha Brooks',        '506 S. Main Street'),
('10003', 'BEMIS COMPANY',          '1401 W. FOURTH PLAIN BLVD.'),
('10003', 'CEI',                    '597 VANDYRE BOULEVARD'),
('10003', 'Pacific Pet',            '28th Avenue'),
('10003', 'PETSMART, INC.',         '16091 NORTH 25TH STREET'),
('10003', 'THE PET FIRM',           '16418 NORTH 37TH STREET')

select
  min(Code) as Code,
  min(Name) as Name,
  min(Address1) as Address1
from @T
group by soundex(Name)
________________________________________________________
Code  Name                    Address1
10003 AMEICAN NUTRITION INC   2183 BALL STREET
10003 AMERICAN NUTRITION INC  2183 BALL STREET
10003 BEMIS COMPANY           1401 W. FOURTH PLAIN BLVD.
10003 CEI                     597 VANDYRE BOULEVARD
10003 Pacific Pet             28th Avenue
10003 PETSMART, INC.          16091 NORTH 25TH STREET
10003 Samantha Brooks         506 S. Main Street
10003 THE PET FIRM            16418 NORTH 37TH STREET

为了工作,我帮助编写确认地址验证的软件(对于SmartyStreets)。 我想回应托马斯的答案,唯一实用而有效的解决方案是使用CASS认证的供应商。 这是非常复杂的,但这些服务将为你做并做得很好。

我还要补充一点,大多数免费API都有许可限制,阻止他们使用他们的服务来处理地址列表(Google不是唯一的 - 即使USPS对他们的API使用有限制)。

我会推荐像LiveAddress或CASS认证的Scrubbing这样的服务来满足您的需求(后者可能适用于现有的表格),但我会让您自己做一些研究,以便让您了解更多信息。 我很乐意为您解决与地址相关的问题。

链接地址: http://www.djcxy.com/p/95689.html

上一篇: SQL address data is messy, how to clean it up in a query?

下一篇: Hidden Features of SQL Server