如何将格式为“$ 400,000.88”的字符串值转换为小数

时间:2013-09-27 00:06:19

标签: sql sql-server

我需要在一个表中插入一个看起来像钱的字符串值到另一个表,其中列类型为十进制(18,2)。我尝试过的代码如下:CAST(REPLACE(REPLACE(d.Cost,',',''),'$','') AS DECIMAL(18,2)) AS 'Cost' 但是获取将数据类型varchar转换为数字的错误。

3 个答案:

答案 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文件中的列格式化为数字而不是货币。