比较 Oracle 中具有地址但格式不同的 2 列

问题描述 投票:0回答:1

需要比较两个有地址的表中的数据。唯一的区别是一个表中的数据是缩写,例如 St、E、W、Rd 等,而另一表中的数据是街道、东、西、路等。

示例:需要比较这两个地址,结果是否为真:

东南19大道3280号

第 19 大道东南 3280 号

sql oracle
1个回答
0
投票

重读保罗的评论。

另一方面,由于您没有描述什么样的“结果”可以满足您的需求,请看下面的示例。它计算两个值之间的相似度;结果是百分比。

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>
© www.soinside.com 2019 - 2024. All rights reserved.