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

如何使用XMLGET提取XML内部标签值并拼接为连续字符串?

问题

存储在xmldata列中的XML数据如下:

<Inquiry>
  <MemberCode>56</MemberCode>
  <MemberName>COMP</MemberName>
  <Date>16</Date>
</Inquiry>

需要使用XMLGET函数提取XML内部标签的数值,并拼接为连续字符串56COMP16。当前编写的SQL查询部分语句返回null,无法得到期望结果:

SELECT TOP 100
    KEY,
    GET(b.VALUE,'@')::STRING as name, --returns Inquiry
    b.VALUE:"$"[1]."$"[1],--returns null
    GET(XMLGET(b.VALUE, GET(b.VALUE,'@')::STRING), '$') as value1,--returns null
    -- XMLGET(VALUE,GET(b.VALUE,'@')::STRING):"$" as value,--returns null
    b.value as children,-- returns full xmldata
    b.this
    
FROM
    (SELECT  
        KEY,
        VALUE
        ,this
    from
         FULL_XML,
        LATERAL FLATTEN(XMLGET(XMLGET(XML_DATA,'Report'),'Inquiries'):"$") )b ;

解决方案

正确SQL语句

SELECT TOP 100
    KEY,
    -- 提取各子节点值并拼接
    XMLGET(b.VALUE, 'MemberCode'):"$"::STRING ||
    XMLGET(b.VALUE, 'MemberName'):"$"::STRING ||
    XMLGET(b.VALUE, 'Date'):"$"::STRING AS value
FROM
    (SELECT  
        KEY,
        VALUE,
        this
    from
         FULL_XML,
        LATERAL FLATTEN(XMLGET(XMLGET(XML_DATA,'Report'),'Inquiries'):"$") )b ;

说明

  1. 直接定位子节点:XMLGET(b.VALUE, 'MemberCode')可直接获取<Inquiry>下的<MemberCode>子节点,通过:"$"提取节点的文本值。
  2. 字符串拼接:使用Snowflake的字符串连接运算符||将三个标签的文本值拼接为连续字符串。
  3. 类型转换:通过::STRING确保提取的数值转换为字符串类型,避免拼接时出现类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:43:22