匹配具有公差的列的数据

时间:2019-06-04 08:46:50

标签: oracle

好的,我需要匹配容差为2的oracle数据库中两个表中的地址数据。这意味着在匹配值'abc de fghij'和'abd el fghij'时应返回true。这两个不同的角色可以在任何地方,可以在不同的地方,也可以分开。 我已经在Google和Google上搜索过,但是找不到类似这样的函数或逻辑。有人可以引导我去哪里找这个。

2 个答案:

答案 0 :(得分:1)

示例:

with t(a, b) as ( 
  select 'abc de fghij', 'abd el fghij' from dual union all
  select '1234', '456784' from dual )
select a, b, 
       length(trim(translate(a, b, ' '))) ab,
       length(trim(translate(b, a, ' '))) ba
  from t

返回:

A            B                    AB         BA
------------ ------------ ---------- ----------
abc de fghij abd el fghij          1          1
1234         456784                3          4

这意味着在第1行中,A中的一个字符在B中不存在,而B中的一个字符在A中不存在。

如果此逻辑正确,则将查询写为:

select a, b
  from t
  where length(trim(translate(a, b, ' '))) + length(trim(translate(b, a, ' '))) <= 2

答案 1 :(得分:0)

我认为您可以使用UTL_MATCH.EDIT_DISTANCE('abc de fghij', 'abd el fghij')解决您的问题。这将计算两个字符串之间的Levenshtein Distance

除了您的请求外,这还允许添加或删除字符,但这应该是一个很好的起点。

因此最终查询可能如下所示:

SELECT * FROM <TABLE> WHERE UTL_MATCH.EDIT_DISTANCE(<COLUMN>, :PARAMETER) <= 2