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