我需要在一个表中插入一个看起来像钱的字符串值到另一个表,其中列类型为十进制(18,2)。我尝试过的代码如下:CAST(REPLACE(REPLACE(d.Cost,',',''),'$','') AS DECIMAL(18,2)) AS 'Cost'
但是获取将数据类型varchar转换为数字的错误。
答案 0 :(得分:1)
尝试:
CAST(CAST(REPLACE(REPLACE(d.Cost,',',''),'$','') AS Float) AS DECIMAL(18,2)) AS 'Cost'
答案 1 :(得分:1)
在数据库中存储格式化值并不是一个好主意,但这个问题很容易解决。
您无法将其强制转换为 Decimal 的原因是因为目前它是 Varchar 。所以首先把它放在 Money 中,然后你可以将它转换成其他东西。
这适用于Sql Server:
select cast(cast('$400,000.88' as money) as decimal(10,2))
答案 2 :(得分:0)
托马斯的评论使我重新思考用户的工作流程。我希望上传excel文件是灵活的,但允许上传“成本”列作为货币导致问题。他们将需要将excel文件中的列格式化为数字而不是货币。