如何从oracle数据库中的分隔列值匹配中获取精确的字符串值

时间:2016-09-20 05:38:46

标签: oracle contains

我有2张桌子

Table 1:
#######
ID  Location
1    India
2    Australia

Table 2:
############
Name   Locations
test1  India|North America
test2  Indiana|Australia

我使用以下查询从表2中获取名称,如果它包含表2的位置中的位置。

select Name
from table2 t2 inner join table1 t1 
  on instr(t1.Location,t2.Locations,length(t1.Location)) >= 1;  

但是当它被执行时它仍然给了我印第安纳州的结果,而它应该只返回我的位置印度的结果。

我也尝试在查询中使用contains,但是包含第二个参数作为字符串但不作为列名。

还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

regexps在这种情况下总能提供帮助

with 
    table1 (id, location) as (
        select 1, 'India' from dual union
        select 2, 'Australia' from dual 
    ),
    table2 (name, locations) as (
        select 'test1', 'India|North America' from dual union
        select 'test2', 'Indiana|Australia' from dual 
    )
select  *
from    table2 join table1 on 
            regexp_like (locations, '(^|\|)' || location || '(\||$)') 

答案 1 :(得分:0)

尝试使用分隔符查找位置,如下所示:

select Name from table2 t2 
inner join table1 t1 on instr(t2.Locations,t1.Location||'|') >= 1