2

我正在尝试从 XML 文档中选择值,其中一些是十进制值,但它们位于 XML 数据馈送中,由逗号而不是小数点2,05而不是2.05. 我相信这是德国人写十进制数的风格。

无论如何,当我尝试选择它们时出现错误Error converting data type nvarchar to numeric,并希望有某种方法可以使此查询工作而无需对源数据进行预处理:

DECLARE @XmlDoc INT
DECLARE @XmlData VARCHAR(MAX) 

SET @XmlData = '<xml><sample><decvalue>2,05</decvalue></sample></xml>'

EXEC sp_xml_preparedocument @XmlDoc OUTPUT, @XmlData

SELECT *
FROM OPENXML(@XmlDoc,'/xml/sample',2)                     
WITH (decvalue DECIMAL(10,2) 'decvalue')
4

1 回答 1

1

试试这个——

询问:

DECLARE @XmlData XML 
SELECT @XmlData = '<xml><sample><decvalue>2,05</decvalue></sample></xml>'

SELECT CAST(REPLACE(t.c.value('decvalue[1]', 'VARCHAR(10)'), ',', '.') AS DECIMAL(10,2))
FROM @XmlData.nodes('/xml/sample') t(c)

输出:

2.05
于 2013-05-27T05:05:58.583 回答