17,377
社区成员
发帖
与我相关
我的任务
分享
create or replace function f_str_start_end(f_str varchar2, f_start varchar2, f_end varchar2)
return varchar2 as
i varchar2(2000);
begin
if f_str is null then
return null;
end if;
i := substr(f_str,
instr(f_str, f_start) + length(f_start),
instr(f_str, f_end, instr(f_str, f_start)) -
instr(f_str, f_start) - length(f_start));
return i;
exception
when others then
return '-1';
end;
with tab1 as (
select '"<?xml version="1.0" encoding="GBK"?>
<records columns="BAUAR`BAUAA`BAUAS`BAUAB`BAUAQ`BAUAC`BAUAD`BAUAE`BAUAF">
<record I9999="1" state="" edit="1">AA001`2019.01.01``0103`010304`0106`驾驶员`1`</record>
<record I9999="2" state="" edit="1">AA002`2019.01.01``0103`010315`0104`党务`1`</record>
</records>"' aa from dual
)
select f_str_start_end(t1.aa, '<record I9999="1" state="" edit="1">', '</record>') from tab1 t1;
剩下的列可以用regexp_substr慢慢拼