oralcle解析xml求助

zzx129728xxx 2019-05-27 05:02:21
数据库中A表中T_A指标存储的内容为:
"<?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>"
怎么使用 sql数据查询解析出下列数据:
...全文
157 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayi_224 2019-05-28
  • 打赏
  • 举报
回复
这种数据可以直接截取字符串
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慢慢拼

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧