尝试将字符串转换为int时转换失败

时间:2015-04-10 08:31:34

标签: sql sql-server string int

我在字符串列中有一些销售数字,我需要将其转换为某种格式,以便我可以相互计算它们,但是在尝试转换它时会出现此错误。

  

转换varchar值时转换失败' -6.353,35&#39数据类型int。

我不能通过四舍五入来赔钱。它不会混合,但只要我没有将它们四舍五入,我会转换为什么类型。你的想法是什么?

例如我有-6.353,35和300,30而且我想把它们相加-6.053,05

2 个答案:

答案 0 :(得分:0)

试试这个......

select convert(int,convert(float,replace('-6.353,35',',','')))

因为有(,)逗号它不能转换为float,所以在转换为float之后删除(,)逗号我们可以转换为int

如果您想要小数值,则应使用float

select convert(float,replace('-6.353,35',',',''))

修改 与@marc_s建议一样,最好使用decimal而不是float

select convert(decimal,replace('-6.353,35',',',''))

答案 1 :(得分:0)

首先,您希望将其转换为decimal值,而不是int,否则会在小数点后丢失任何内容。

这里的问题是存储值时使用的分隔符。

使用您的数字,您可以使用分数.来表示千位分隔符,使用逗号,来表示小数点。

要使您能够将值转换为有效的小数,您需要使用SQL Server可以处理的格式。

执行此操作的一种简单方法是在尝试转换值之前删除/替换问题字符:

DECLARE @val AS VARCHAR(10) = '-6.353,35'

-- step 1: remove thousand separator
SET @val = REPLACE(@val, '.', '')
SELECT @val AS RemoveThousandSeparator

-- step 2: replace decimal separator with decimal point
SET @val = REPLACE(@val, ',', '.')    
SELECT CONVERT(DECIMAL(18,2), @val) AS DecimalPointAdded

-- to do it in one statement:
SET @val = '-6.353,35'
SELECT CONVERT(DECIMAL(18,2),
               REPLACE(REPLACE(@val, '.', ''), ',', '.')) AS NumericeRepresentation

除此之外,您最好先以正确的格式存储数值,以避免这种解决方法。