String 在字符串中查找子字符串

String 在字符串中查找子字符串,string,oracle,substring,proc-sql,String,Oracle,Substring,Proc Sql,我试图在字符串中定位子字符串。我在网上找到的一切都是定位它的位置。我不在乎位置,考虑到每行浮动的位置,我不能说regexp_instr(X,10,5) 我想说,如果列字符串中有X,那么就给我一个新列,其中只包含我要求的字符串。如果不给我Y 问题是10个字符串中有1个在列字符串中,我正试图通过1到2个步骤将它们作为一个单独的列提取出来 这能做到吗? 谢谢 可能是。。。 但我不清楚你们是想要一列,多列,还是想要第一个结果或者所有匹配的结果 所以,如果列包含“CAT”,并且您正在查找Z,C,A,T。。

我试图在字符串中定位子字符串。我在网上找到的一切都是定位它的位置。我不在乎位置,考虑到每行浮动的位置,我不能说regexp_instr(X,10,5)

我想说,如果列字符串中有X,那么就给我一个新列,其中只包含我要求的字符串。如果不给我Y

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

这能做到吗? 谢谢

可能是。。。 但我不清楚你们是想要一列,多列,还是想要第一个结果或者所有匹配的结果

所以,如果列包含“CAT”,并且您正在查找Z,C,A,T。。。结果列中应该包含哪些结果?不,Z。。。只是C还是猫还是什么

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;

要在一个字符串中搜索另一个字符串,并在找到时返回搜索的字符串,或在未找到时返回固定字符串,您有几个选项。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;

使用case语句,例如
选择case when instr('CAT','a')>0,然后使用'a'else'Not in'end from dual或添加一些预期结果的示例,以帮助我们理解问题。