假如我有一个表tableA 中有一个列A中的值为  < a1="a13322" a2="23423432c" a3="22331dd" />, 下一行又可能是这样    < a1="sdfa234" a2="sfsdfs2" a4="sdfsd2" />在下一行可能是这样< a2="23123123sdf" a3="sdfsd" />还有这样的< a2="sdfsdf23" a4="331231" /> 这样的< a1="22223" a3="234234" /> 还有这样的< a1="1sdf2" a2="" a3="31231sd" />总之现在就是想获得 a2中双引号之间的值,也就是通过regexp_substr来截取,截取规则是a2="和离a2=“举例最近的一个"  求大神指点迷津,注意 有时候可能没有a2,有时候可能a2=”和" 中没有值。求指教,,, 求大神们在来围观!!!! Oracle正则regexp_substrsubstr截取

解决方案 »

  1.   

    自己先顶个,我弄了一个sql语句 
    select regexp_substr(regexp_substr('a1="234234" a2="44323" a3="887a33333"/>','a2=".*"'),'\w+',1,2) from dual输出结果 44323但是当 a2="" 是空的时候,就成了a3了,
    select regexp_substr(regexp_substr('a1="234234" a2="" a3="887a33333"/>','a2=".*"'),'\w+',1,2) from dual
    输出结果 a3
      

  2.   

    用a2=".*?"找出匹配项,然后再用substr获取a2="和"中间的内容。
      

  3.   

    SQL> with a as (select '< a1="a13322" a2="23423432c" a3="22331dd" />' id from dual
      2             union
      3             select '< a1="sdfa234" a2="sfsdfs2" a4="sdfsd2" />' id from dual
      4             union
      5             select '< a2="23123123sdf" a3="sdfsd" />' id from dual
      6             union
      7             select '< a2="sdfsdf23" a4="331231" />' id from dual
      8             union
      9             select '< a1="22223" a3="234234" />' id from dual
     10             )
     11  select regexp_replace(decode(regexp_replace(id, '.*a2="'),
     12                               id,
     13                               null,
     14                               regexp_replace(id, '.*a2="')),
     15                        '".*') id
     16    from a
     17  /
     
    ID
    --------------------------------------------------------------------------------
    23423432c
    sfsdfs2
    23123123sdf
    sdfsdf23
     
      

  4.   

    我是这样写的,
    to_number(regexp_replace(regexp_substr(o.extendxml,'target=".*?"'),'(target=")|"','') )as target已测试