如何在数据中找到拼写错误

时间:2018-01-31 06:48:46

标签: sql-server excel

我想在TOWN_C字段中找到拼写错误。数据如下所示。没有特定的模式,有时拼写错误可能在开头,有时可能在中间或结尾。拼写错误的长度也可能不同。 我正在使用SQL Server Management Studio来执行查询。我使用SUBSTR查找重复项以及left outer join。但这并不仅仅是拼写错误。我仍然需要手动查看数据。

数据 - >

Achampet
ACHEMPET
AGIA
AGIYA
ASHOK NAGAR
ASHOKNAGAR
ASHOKNAGER

我正在使用的SQL查询 - >

Select distinct(T3.TOWN__C)
 From (Select T1.Sub_Str, Count(T1.Sub_Str) as Y
       From (SELECT TOWN__C, SUBSTRING(TOWN__C, 1, 3) as Sub_Str
             FROM [SALESFORCE].[dbo].[Outlet Master] group by TOWN__C)T1
       Group by T1.Sub_Str having count(*)> 1)T2
 Left outer join
     [SALESFORCE].[dbo].[Outlet Master]T3
 On T2.Sub_Str = SUBSTRING(T3.TOWN__C, 1, 3)
 Order by T3.TOWN__C

有没有办法使用SQL或Excel或其他任何方法找出所有这些案例?

1 个答案:

答案 0 :(得分:1)

这是一个使用SOUNDEX的示例,用于尝试查找已使用多个拼写的值"类似"名称:

declare @t table (town varchar(35) not null)
insert into @t(town) values
('Achampet'),
('ACHEMPET'),
('AGIA'),
('AGIYA'),
('ASHOK NAGAR'),
('ASHOKNAGAR'),
('ASHOKNAGER'),
('Downtown'),
('DOWNTOWN'),
('DownTown')

select
    v.*
from
    (select
        *,
        MIN(town) OVER (PARTITION BY town_sound) as minTown,
        MAX(town) OVER (PARTITION BY town_sound) as maxTown
    from
        @t
            cross apply
        (select SOUNDEX(REPLACE(town,' ','')) as town_sound) u
    ) v
where minTown != maxTown

请注意,这并没有返回"闹市区"其中唯一的变化是大写,但确实返回给定样本数据中的所有值,我认为这些值都可以作为可能的拼写错误找到。

另请注意,SOUNDEX有一个方格的历史记录,在旧版本的SQL Server中,通常建议使用更好的" soundex可以实现为UDF。如果需要,您应该能够通过简单搜索找到它的版本。

另请注意,Soundex是专门针对英语发音而设计的。同样,您可以找到更好的定制功能作为特定其他语言的UDF。

结果:

town          town_sound minTown       maxTown
------------- ---------- ------------- ------------
AGIA          A200       AGIA          AGIYA
AGIYA         A200       AGIA          AGIYA
ASHOK NAGAR   A225       ASHOK NAGAR   ASHOKNAGER
ASHOKNAGAR    A225       ASHOK NAGAR   ASHOKNAGER
ASHOKNAGER    A225       ASHOK NAGAR   ASHOKNAGER
Achampet      A251       Achampet      ACHEMPET
ACHEMPET      A251       Achampet      ACHEMPET