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