需要比较两个有地址的表中的数据。唯一的区别是一个表中的数据是缩写,例如 St、E、W、Rd 等,而另一表中的数据是街道、东、西、路等。
示例:需要比较这两个地址,结果是否为真:
东南19大道3280号
第 19 大道东南 3280 号
重读保罗的评论。
另一方面,由于您没有描述什么样的“结果”可以满足您的需求,请看下面的示例。它计算两个值之间的相似度;结果是百分比。
SQL> with test (id, addr1, addr2) as
2 (select 1, '3280 Southeast 19th Avenue', '3280 SE 19th Ave' from dual union all
3 select 2, 'Frankopanska 23, Zagreb' , 'Frankop. 23, ZG' from dual union all
4 select 3, '2300 Oracle Way Austin, TX', '2300 Oracle WY Austin Texas' from dual union all
5 select 4, '3280 Northwest 29th Street', '1280 Bingo St' from dual
6 )
7 select id,
8 utl_match.jaro_winkler_similarity(addr1, addr2) sim
9 from test
10 order by id;
ID SIM
---------- ----------
1 84
2 87
3 90
4 59
SQL>
假设任何结果 - 相似度高于 80% - 都是令人满意的,然后您将应用该条件:
<snip>
7 select id, addr1, addr2
8 from test
9 where utl_match.jaro_winkler_similarity(addr1, addr2) >= 80
10 order by id;
ID ADDR1 ADDR2
---------- -------------------------- ---------------------------
1 3280 Southeast 19th Avenue 3280 SE 19th Ave
2 Frankopanska 23, Zagreb Frankop. 23, ZG
3 2300 Oracle Way Austin, TX 2300 Oracle WY Austin Texas
SQL>