SQL Server中XML类型列的XPATH查询:提取EPS节点value属性
提取TEST表XML列中EPS节点的value属性数据
嘿,我来帮你搞定这个XML数据提取的需求!假设你用的是SQL Server(毕竟它原生支持xml数据类型和XPath查询),这里有两种实用的写法:
方法1:只提取value属性
如果只需要每个EPS节点的value值,用这个查询就够了:
SELECT eps_node.value('@value', 'VARCHAR(255)') AS EPS_Value FROM TEST CROSS APPLY info.nodes('/RootEPS/EPS') AS eps(eps_node)
简单解释下代码逻辑:
info.nodes('/RootEPS/EPS'):把info列里的XML数据,按照/RootEPS/EPS这个XPath路径拆分成一个个独立的EPS节点CROSS APPLY:把拆分出来的每个EPS节点和原表的行做关联,保证每个节点都能生成单独的一行数据eps_node.value('@value', 'VARCHAR(255)'):从拆分后的节点里提取value属性的值,这里用VARCHAR(255)是通用类型,你可以根据实际数据长度调整(比如邮箱用VARCHAR(100),地址用VARCHAR(500))
方法2:同时提取key和value属性(可选)
要是你还想对应拿到每个EPS节点的key属性,用这个查询就行:
SELECT eps_node.value('@key', 'VARCHAR(255)') AS EPS_Key, eps_node.value('@value', 'VARCHAR(255)') AS EPS_Value FROM TEST CROSS APPLY info.nodes('/RootEPS/EPS') AS eps(eps_node)
额外注意点:
你示例里的XML虽然有xmlns:xsd和xmlns:xsi命名空间,但这些并没有在EPS节点上使用,所以不需要额外处理命名空间。如果以后XML里的节点用到了命名前缀,才需要用WITH XMLNAMESPACES来声明哦。
内容的提问来源于stack exchange,提问作者Dev Gosain
相关产品推荐
相关产品推荐

