在字符串Oracle

时间:2015-08-05 12:55:24

标签: string oracle substring proc-sql

我正在尝试在字符串中找到子字符串。我在网上找到的一切都是找到它的位置。我不关心这个位置,并给出了每一行浮动的位置我不能说regexp_instr(X,10,5)。

我想说如果Column String中的X然后给我一个新列,只有我要求的字符串。如果没有给我Y.

问题是10个字符串中有1个在Column String中,我试图在1到2个步骤中将它们作为单独的列提取出来。

可以这样做吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

也许像...... 但我不清楚你是想要一列,多列,还是想要第一个结果或所有结果都匹配...

因此,如果列中包含“CAT”#C并且你正在寻找Z,C,A,T ......结果列中应该有什么结果?没有Z ......只是C或CAT还是什么?

SELECT CASE WHEN INSTR('CAT','Z')>0 THEN 'Z' 
            WHEN INSTR('CAT','C')>0 THEN 'C'
            WHEN INSTR('CAT','A')>0 THEN 'A'
            WHEN INSTR('CAT','T')>0 THEN 'T'
            ELSE 'Not in' end from dual;

答案 1 :(得分:1)

要在字符串中搜索另一个字符串并在找到时返回搜索到的字符串,或者如果找不到固定字符串,则有多个选项。 instr和regexp_instr方法依赖于以下事实:当未找到时,它们返回零(0)的索引,而regexp_substr方法在未找到时返回null,否则返回与搜索模式匹配的字符串:

with dta as (
  select 'this is a test' str from dual union all
  select 'every good boy does fine' from dual union all
  select 'testing one two three' from dual
), fnd as (
  select 'test' fnd, 'not found' fail from dual union all
  select 'good' fnd, 'not good' fail from dual
)
select fnd
     , str
     , case instr(str, fnd) when 0 then fail else fnd end result
     , case regexp_instr(str,fnd) when 0 then fail else fnd end result2
     , nvl(regexp_substr(str, fnd), fail) result3
  from dta, fnd
  order by 1, 2;