我想在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或其他任何方法找出所有这些案例?
答案 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