如何使用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 ;
说明
- 直接定位子节点:
XMLGET(b.VALUE, 'MemberCode')可直接获取<Inquiry>下的<MemberCode>子节点,通过:"$"提取节点的文本值。 - 字符串拼接:使用Snowflake的字符串连接运算符
||将三个标签的文本值拼接为连续字符串。 - 类型转换:通过
::STRING确保提取的数值转换为字符串类型,避免拼接时出现类型错误。
内容的提问来源于stack exchange,提问作者gayathri
相关产品推荐
相关产品推荐

