我需要将一个看起来像钱的字符串值从一个表插入到另一个列类型为十进制(18,2)的表中。我尝试过如下代码:CAST(REPLACE(REPLACE(d.Cost,',',''),'$','') AS DECIMAL(18,2)) AS 'Cost'
但是将数据类型 varchar 转换为数字时出现错误。
问问题
129 次
3 回答
1
尝试:
CAST(CAST(REPLACE(REPLACE(d.Cost,',',''),'$','') AS Float) AS DECIMAL(18,2)) AS 'Cost'
于 2013-09-27T02:16:52.110 回答
1
在数据库中存储格式化值不是一个好主意,但这个问题很容易解决。
您不能将其转换为Decimal的原因是因为目前它是Varchar。因此,首先将其转换为Money,然后您可以将其转换为其他东西。
这适用于 Sql Server:
select cast(cast('$400,000.88' as money) as decimal(10,2))
于 2013-09-27T13:55:38.780 回答
0
Thomas 的评论让我重新思考了用户的工作流程。我希望 excel 文件的上传灵活,但允许上传“成本”列,因为货币导致了问题。他们将需要将 excel 文件中的列格式化为数字而不是货币。
于 2013-09-27T13:40:58.630 回答