我正在加载查找员工表的表。但是,有时源文件和Employee表中的名称不正确。
**Employee table:**
Employee Name
Paul Jaymes
**Source File**
Paul James
我希望这个匹配。可能是什么解决方案。
答案 0 :(得分:6)
使用UTL_MATCH
package或SOUNDEX
function:
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
: 计算string-1和string-2
SELECT *
FROM Employees
WHERE UTL_MATCH.JARO_WINKLER( Name, 'Paul James' ) > 0.9
查询4 :
UTL_MATCH.JARO_WINKLER_SIMILARITY
: 计算string-1和string-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' )
<强> Results 强>: 所有都给出了输出:
| NAME |
|-------------|
| Paul Jaymes |
答案 1 :(得分:1)
在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 ;