将XML投射到资金

时间:2015-05-16 18:43:32

标签: sql-server xml casting currency

我有一些XML数据需要添加为货币。我尝试的每次转换都会收到错误

  

不允许从数据类型xml到____的显式转换。

这是一个简单的例子,包含几次失败的尝试。

DECLARE @xmlstuff xml

SET @xmlstuff = '3'

SELECT 
   CAST (@xmlstuff AS varchar(80)) as worksButDontCare,
   --CAST (@xmlstuff AS MONEY) as dollars, -- Explicit conversion from data type xml to money is not allowed.
   --CAST (@xmlstuff AS NUMERIC) as number, -- Explicit conversion from data type xml to numeric is not allowed.
   --CONVERT (decimal(18,2),@xmlstuff ) AS cd1_feeAmount, -- Explicit conversion from data type xml to decimal is not allowed.

3 个答案:

答案 0 :(得分:2)

TSQL不允许从xml直接转换为任何数字类型。

因此,正如@incircuitous指出的那样,您必须先转换为文本,然后转换为Money

有关TSQL数据类型转换的更多信息,请look for the big table on MSDN

答案 1 :(得分:2)

MSDN中的转化表确实对参考有用,@GabrielRainha为+1。

为了从XML数据类型中获取价值,我建议查看特定于XML的方法,即针对此特定情况的value()

DECLARE @xmlstuff xml
SET @xmlstuff = '3'

SELECT @xmlstuff.value('.', 'money') as dollars

<强> SQL Fiddle

value()的第二个参数是返回值的数据类型。第一个参数是XQuery表达式,用于在XML结构中定位值。假设您在XML中没有任何结构 - 只是值,因为您希望它可以使用CAST直接转换 - ,您始终可以将.作为第一个参数传递。

答案 2 :(得分:1)

我找到的答案是转换为varchar作为中间步骤。

CAST ((CAST (@xmlstuff AS varchar(80))) AS MONEY)  AS xmlToVarcharToMoney