假如我有一个表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截取
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 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
to_number(regexp_replace(regexp_substr(o.extendxml,'target=".*?"'),'(target=")|"','') )as target已测试