从XML中选择使用逗号作为小数分隔符的十进制数

时间:2013-05-27 05:00:48

标签: sql-server xml

我正在尝试从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')

1 个答案:

答案 0 :(得分: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