Oracle:模糊查找

时间:2018-04-30 11:32:39

标签: sql oracle

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

**Employee table:**
Employee Name
Paul Jaymes

**Source File**
Paul James

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

2 个答案:

答案 0 :(得分:6)

使用UTL_MATCH packageSOUNDEX function

SQL Fiddle

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 ;