我有一个查询,它允许我从所有出现的XML标记值中提取值. 我希望将其保留在一行中,但使用分隔符(如‘||’)分隔各值.

SELECT
    DBMS_LOB.SUBSTR (
        XMLCAST (XMLQUERY ('levlel1/level2/level3/level4' PASSING XMLTYPE (xml_col) RETURNING CONTENT) AS CLOB),
        1000,
        1
    ) RULES
FROM
    table

结果是:Rule1Rule2Rule3

我想要这样的结果: 规则1||规则2||规则3

谢谢.

推荐答案

使用XMLTABLE以行的形式生成值,然后使用||作为连接分隔符进行聚合:

SELECT LISTAGG(rule, ' || ') WITHIN GROUP (ORDER BY ROWNUM) AS rules
FROM   table_name t
       CROSS APPLY XMLTABLE(
         'levlel1/level2/level3/level4'
         PASSING XMLTYPE(t.xml_col)
         COLUMNS
           rule VARCHAR2(50) PATH '.'
       );

其中,对于样本数据:

CREATE TABLE table_name(xml_col) AS
  SELECT '<levlel1>
  <level2>
    <level3><level4>Rule1</level4></level3>
    <level3>
      <level4>Rule2</level4>
      <level4>Rule3</level4>
    </level3>
  </level2>
</levlel1>' FROM DUAL;

输出:

RULES
Rule1 || Rule2 || Rule3

fiddle

Sql相关问答推荐

Snowflake SQL比较克隆x原始计数

表名数组

前面的语句不喜欢AND LIKE?当try 更新使用ID和日期过滤的表时

SQL将 Select 查询作为新列添加到另一个 Select 查询

SQL Select 最小优先级

最近3个月收到的邮箱总数

PostgreSQL:按小时查看调整日期

使用SQL数据库中的现有列派生或修改几个列

优化Postgres搜索未知长度的子串

SQL仅返回第一个字母在A-Z之间的值

什么是 100.它与 100 有什么区别?

每次计数器增加时通过运行总重置进行分组

Oracle PL/SQL长期运行问题

REGEXP_SUBSTR使用方法

根据开始时间和结束时间计算has_impact字段

插入行时的行安全策略问题

Postgres:表的累积视图

多列上的 SQL UNIQUE 约束 - 它们的组合必须是唯一的还是至少其中之一?

查找距上一条记录大于或等于 30 天的记录

有条件求和