用于字符串匹配的Oracle REGEXP_SUBSTR b / w两列

时间:2015-07-06 16:30:20

标签: sql regex oracle join

问题

用户经常输入"国家/地区名称"字符串到"城市名称"领域。启发式地,这似乎是一种非常普遍的做法。例如,用户可能会把台北台北"在城市名称的时候只有" TAIPEI"应该输入,然后国家将是" TAIWAN"。我正在努力为这个特定字段聚合这些实例(您的帮助将允许我将其扩展到其他列和表),然后确定可能的排名与严格的" country" " city"中的名字字段。

我试图利用两个表来跟踪数据验证问题。 Tbl1被命名为" Customer_Address"由地理列组成,如(Customer_Num,Address,City_Name,State,Country_Code,Zipcode)。 Tbl2命名为" HR_Countries"是2位ISO国家代码的清洁表及其相应的名称值(黎巴嫩,台湾,中国,叙利亚,俄罗斯,乌克兰等)以及目前尚未使用的其他一些领域。

最初的步骤是查询" Customer_Address"找到City_Names LIKE一系列OR语句(LIKE'%CHINA',或LIKE' TAIWAN',OR等等)并计算City_Name与指定country_name类似的出现次数字符串我通过它,结果非常好。我已经编写了一些例外情况来处理类似于"黎巴嫩,OH和#34;所以我的整体结果在第一阶段是令人满意的。

部分查询执行从Tbl1到Tbl2的LEFT连接,以便根据对tbl1的查询添加来自tbl2的风险评级:

LEFT JOIN tbl2 risk 
 ON INSTR(addr.CITY_NM, risk.COUNTRY_NAME,1) <> 0

Tbl1数据输出示例(head(tbl1),n = 7)

CountryNameInCity   CountOfOccurences   RR
China             15                     High
Taiwan                 2000                  Medium 
Japan              250                   Low
Taipei, Taiwan     25                    NULL
Kabul, Afghanistan  10                   NULL
Shenzen China   100                  NULL
Afghanistan          52                       Very High

Tb2数据的示例(头(tbl2),n = 6)

CountryName CountryCode RR
China   CN          High
Taiwan  TW          High
Iraq    IQ          Very High
Cuba    CU          Medium
Lebanon LB          Very High
Greece  GR          High

所以我的问题如下:

1)不是手动传递国家代码的一系列OR语句,而是使用Tbl2作为匹配&#34; LIKE&#34;推动查询?

2)你能推荐一种更好的方法来比较查询的输出(参见Tbl1示例)并确保多个字符串(台北,台湾等)被适当地聚合并且带回正确的&#39; RR&#39;评价

感谢您抽出时间对此进行审核并做出回应。

0 个答案:

没有答案