繁体   English   中英

Oracle:模糊查找

[英]Oracle: Fuzzy lookup

我正在加载查找员工表的表。 但是,有时源文件和Employee表中的名称不正确。

**Employee table:**
Employee Name
Paul Jaymes

**Source File**
Paul James

我希望这个匹配。 可能是什么解决方案。

使用UTL_MATCHSOUNDEX功能

SQL小提琴

Oracle 11g R2架构设置

CREATE TABLE Employees ( Name ) AS
SELECT 'Paul Jaymes' FROM DUAL;

查询1

UTL_MATCH.EDIT_DISTANCE :计算将string-1转换为string-2所需的更改次数

SELECT *
FROM   Employees
WHERE  UTL_MATCH.EDIT_DISTANCE( Name, 'Paul James' ) < 2

查询2

UTL_MATCH.EDIT_DISTANCE_SIMILARITY :计算将string-1转换为string-2所需的更改次数,返回0(不匹配)和100(完全匹配)之间的值

SELECT *
FROM   Employees
WHERE  UTL_MATCH.EDIT_DISTANCE_SIMILARITY( Name, 'Paul James' ) > 90

问题3

UTL_MATCH.JARO_WINKLER :计算字符串-1和字符串-2之间的一致性度量

SELECT *
FROM   Employees
WHERE  UTL_MATCH.JARO_WINKLER( Name, 'Paul James' ) > 0.9

查询4

UTL_MATCH.JARO_WINKLER_SIMILARITY :计算字符串-1和字符串-2之间的一致性度量,返回0(不匹配)和100(完全匹配)之间的值

SELECT *
FROM   Employees
WHERE  UTL_MATCH.JARO_WINKLER_SIMILARITY( Name, 'Paul James' ) > 95

查询5

SOUNDEX :返回包含char的语音表示的字符串。 此功能可让您比较拼写不同的单词,但英语听起来相似。

SELECT *
FROM   Employees
WHERE  SOUNDEX( Name ) = SOUNDEX( 'Paul James' )

结果 :全部给出输出:

|        NAME |
|-------------|
| Paul Jaymes |

在Oracle中使用UTL_MATCH.EDIT_DISTANCE_SIMILARITY函数。

我建议创建一个临时表,如下所示,检查数据是否符合预期。 通常得分高于90-93应该与不同系统中的一些错字相同。 如果只有1个字符的差异,你将得到92分及以上的分数。

select s.employee_name,
utl_match.edit_distance_similarity(initcap(s.employee_name),e.employee_name) as score
from source_table s cross join employee_table e
where utl_match.edit_distance_similarity(initcap(s.employee_name),e.employee_name) >=90 ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM