oracle截取两个不规则字符间内的容

xiaohonging3 2017-10-12 02:13:16
现在有一个oracle字段内容是这样子的<?xml version="1.0" encoding="utf-8" ?><fetchdatas><datas><data name="AREANAME" type="String"></data><data name="XZQMC" type="String">测试市</data><data name="JBR" type="String">系统管理员</data><data name="FJ" type="String"></data><data name="XZDW" type="String">测试区</data><data name="CXMD" type="String"></data><data name="QLRS"
type="String">小明</data><data name="ZJHS" type="String">112345455</data><data name="DJJG" type="String">
测试不动产</data><data name="DJJGLXDH" type="String">4508213</data><data name="CZSJ" type="String">
2017年10月12日 08:57:36</data><data name="CXSJ" type="String">2017年10月12日</data><data name="CXBH" type="String">无房2017区号07001869</data></datas><detail ID="bdccqxxList"/><detail ID="qlrInfoList"><row ID="000001"><data name="xh" type="String">1</data><data name="qlrmc" type="String">小明</data><data name="qlrzjh" type="String">112345455</data></row></detail></fetchdatas>,需要截取成:测试市系统管理员测试区小明112345455测试不动产450821312017年10月12日 08:57:362017年10月12日无房2017区号070018691小明112345455
求oracle的语句,谢谢!ps:每个内容之间前后都是一样的,比如:type="String">112345455</data>,所以我的想法是可以截取type="String">和</data>之间的内容,再拼接起来,但是不知道怎么操作。
...全文
1589 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2017-10-12
  • 打赏
  • 举报
回复
引用 3 楼 xiaohonging3 的回复:
请问这个用plsql的函数或者语句实现吗?因为我要把两个字符之间的值取出来再拼接成一个字段,这个结果会用于测试界面值和数据库值

下面这个就是SQL语句实现,拼装的字段为DATA,可以作为你测试界面的值和数据库值。

SELECT LISTAGG(DATA) WITHIN GROUP(ORDER BY ROWNUM) AS DATA
FROM (SELECT TRIM(EXTRACTVALUE(VALUE(B), '//data/text()')) AS DATA
FROM TMP A, TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(A.S), '//data'))) B)
WHERE DATA IS NOT NULL
chengccy 2017-10-12
  • 打赏
  • 举报
回复
引用 3 楼 xiaohonging3 的回复:
请问这个用plsql的函数或者语句实现吗?因为我要把两个字符之间的值取出来再拼接成一个字段,这个结果会用于测试界面值和数据库值
用SQL语句实现了, 看楼上
xiaohonging3 2017-10-12
  • 打赏
  • 举报
回复
请问这个用plsql的函数或者语句实现吗?因为我要把两个字符之间的值取出来再拼接成一个字段,这个结果会用于测试界面值和数据库值
chengccy 2017-10-12
  • 打赏
  • 举报
回复
如果需要拼接成一个字符串的话 加个listagg
SELECT LISTAGG(DATA) WITHIN GROUP(ORDER BY ROWNUM) AS DATA
FROM   (SELECT TRIM(EXTRACTVALUE(VALUE(B), '//data/text()')) AS DATA
         FROM   TMP A, TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(A.S), '//data'))) B)
WHERE  DATA IS NOT NULL
chengccy 2017-10-12
  • 打赏
  • 举报
回复
用xmlquery
WITH TMP AS
 (SELECT '<?xml version="1.0" encoding="utf-8" ?>
<fetchdatas>
  <datas>
    <data name="AREANAME" type="String"/>
    <data name="XZQMC" type="String">测试市</data>
    <data name="JBR" type="String">系统管理员</data>
    <data name="FJ" type="String"/>
    <data name="XZDW" type="String">测试区</data>
    <data name="CXMD" type="String"/>
    <data name="QLRS" type="String">小明</data>
    <data name="ZJHS" type="String">112345455</data>
    <data name="DJJG" type="String">测试不动产</data>
    <data name="DJJGLXDH" type="String">4508213</data>
    <data name="CZSJ" type="String">2017年10月12日 08:57:36</data>
    <data name="CXSJ" type="String">2017年10月12日</data>
    <data name="CXBH" type="String">无房2017区号07001869</data>
  </datas>
  <detail ID="bdccqxxList"/>
  <detail ID="qlrInfoList">
    <row ID="000001">
      <data name="xh" type="String">1</data>
      <data name="qlrmc" type="String">小明</data>
      <data name="qlrzjh" type="String">112345455</data>
    </row>
  </detail>
</fetchdatas>' S
  FROM   DUAL)
SELECT TRIM(EXTRACTVALUE(VALUE(B), '//data/text()')) AS DATA
FROM   TMP A, TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(A.S), '//data'))) B

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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