我正在尝试在字符串中找到子字符串。我在网上找到的一切都是找到它的位置。我不关心这个位置,并给出了每一行浮动的位置我不能说regexp_instr(X,10,5)。
我想说如果Column String中的X然后给我一个新列,只有我要求的字符串。如果没有给我Y.
问题是10个字符串中有1个在Column String中,我试图在1到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;