SQL Server中XML value函数在PostgreSQL的等效写法
PostgreSQL中获取XML值的等效写法
对应SQL Server里CAST(XML AS XML).value('(xpath here)','nvarchar(50)')的写法,PostgreSQL里有两种常用实现方式:
兼容全版本的写法(用xpath()函数)
如果你的XML数据存在字符串类型字段里,得先转成XML类型,再用xpath()提取结果,最后取数组第一个元素转成目标类型:
(xpath('你的xpath表达式', CAST(目标字段 AS XML)))[1]::nvarchar(50)
举个实际例子:SQL Server里要提取根节点下user元素的name属性值,写法是CAST(xml_data AS XML).value('(/root/user/@name)[1]','nvarchar(50)'),到PostgreSQL里就写成:
(xpath('/root/user/@name', CAST(xml_data AS XML)))[1]::nvarchar(50)
注意:xpath()返回的是XML数组,所以要用[1]取第一个匹配项;如果是提取元素文本,记得在xpath末尾加/text(),避免返回带标签的完整节点。
简洁写法(PostgreSQL 12+可用,用xpath_string()函数)
PostgreSQL 12及以后版本提供了xpath_string(),直接返回匹配的字符串,不用处理数组,更省心:
xpath_string(CAST(目标字段 AS XML), '你的xpath表达式')::nvarchar(50)
对应上面的例子:
xpath_string(CAST(xml_data AS XML), '/root/user/@name')::nvarchar(50)
要是你的字段本身就是xml类型(不是字符串),直接用字段名就行,不用额外CAST转换。
内容的提问来源于stack exchange,提问作者Eugine Francis
相关产品推荐
相关产品推荐

