You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中合并同名XML节点值至单个字段的实现方法

解决方案:提取XML多节点并合并字段值

核心思路是先通过XMLTABLE提取所有目标节点的字段值,再用PostgreSQL的STRING_AGG函数将同组的字段值用指定分隔符合并。

步骤1:提取所有节点数据

修改XMLTABLE的路径表达式,去掉原有的[1]限制,这样会遍历所有<rodzaj-wsparcia>节点,提取每个节点对应的日期字段。

步骤2:合并字段值

用STRING_AGG函数对提取出的多个日期值进行分组拼接,分隔符使用|。

完整代码示例

假设你的表名为your_table,包含主键id和存储XML数据的字段xml_data:

SELECT 
  t.id,
  -- 合并所有开始日期
  STRING_AGG(x.start_date::TEXT, ' | ') AS merged_start_dates,
  -- 合并所有结束日期
  STRING_AGG(x.end_date::TEXT, ' | ') AS merged_end_dates
FROM 
  your_table t,
  XMLTABLE('/dane/rodzaj-wsparcia'
           PASSING t.xml_data
           COLUMNS 
             start_date DATE PATH 'control-rozpoczecie-wsparcia',
             end_date DATE PATH 'control-zakonczenie-wsparcia'
          ) x
GROUP BY 
  t.id;

单条XML测试示例

如果只是测试单条XML数据,可以直接传入XML字符串:

SELECT 
  STRING_AGG(x.start_date::TEXT, ' | ') AS merged_start_dates,
  STRING_AGG(x.end_date::TEXT, ' | ') AS merged_end_dates
FROM 
  XMLTABLE('/dane/rodzaj-wsparcia'
           PASSING '<dane>
                      <rodzaj-wsparcia>
                        <control-rozpoczecie-wsparcia>2022-11-19</control-rozpoczecie-wsparcia>
                        <control-zakonczenie-wsparcia>2023-01-05</control-zakonczenie-wsparcia>
                      </rodzaj-wsparcia>
                      <rodzaj-wsparcia>
                        <control-rozpoczecie-wsparcia>2022-11-15</control-rozpoczecie-wsparcia>
                        <control-zakonczenie-wsparcia>2023-02-10</control-zakonczenie-wsparcia>
                      </rodzaj-wsparcia>
                    </dane>'::XML
           COLUMNS 
             start_date DATE PATH 'control-rozpoczecie-wsparcia',
             end_date DATE PATH 'control-zakonczenie-wsparcia'
          ) x;

可选:指定合并顺序

如果需要按日期排序后再合并,可在STRING_AGG中添加ORDER BY:

STRING_AGG(x.start_date::TEXT, ' | ' ORDER BY x.start_date) AS merged_start_dates

内容的提问来源于stack exchange,提问作者mtmx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:35:38