我在字符串列中有一些销售数字,我需要将其转换为某种格式,以便我可以相互计算它们,但是在尝试转换它时会出现此错误。
转换varchar值时转换失败' -6.353,35&#39数据类型int。
我不能通过四舍五入来赔钱。它不会混合,但只要我没有将它们四舍五入,我会转换为什么类型。你的想法是什么?
例如我有-6.353,35和300,30而且我想把它们相加-6.053,05
答案 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
除此之外,您最好先以正确的格式存储数值,以避免这种解决方法。