[英]Oracle: Fuzzy lookup
我正在加载查找员工表的表。 但是,有时源文件和Employee表中的名称不正确。
**Employee table:**
Employee Name
Paul Jaymes
**Source File**
Paul James
我希望这个匹配。 可能是什么解决方案。
使用UTL_MATCH
包或SOUNDEX
功能 :
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.