2016-09-16 75 views
0

我有一个字段成本值0.987878656435798654,0.765656787898767 我想弄清楚这是什么数据类型。小数字段上的算术溢出错误

当我给decimal 15,15并试图加载它扔我一个错误

算术溢出错误转换VARCHAR数据类型的数字数据。

回答

2

问题是你没有分配任何长度到的值之前的小数点。

DECIMAL (15, 15)意味着它在小数点后的精度为15位数,但只有足够的空间用于总计15位数 - 因此不会超过1的值。

这意味着DECIMAL (15, 15)只支持在以下范围内的值: -0.9999999999999990.999999999999999(小数点后15位)。

您的第一个例子18数字,所以我会建议使用像DECIMAL (21, 18)

DECIMAL (21, 18)东西将支持范围值:-999.999999999999999999999.999999999999999999(小数点后18位数字)。

但是,您应该分析自己的数据,看看您需要支持的最大值。

+0

谢谢你Siyual。有效。 – swathi

+0

除非你不需要更多的小数,记住从10到19位数,该字段使用9个字节,从20到28它使用13,所以你可以使用'DECIMAL(28,25)'(for例如),使用相同数量的存储字节获得更高精度(来源:https://msdn.microsoft.com/en-us/library/ms187746.aspx)。您也可以考虑使用金钱类型:https://msdn.microsoft.com/en-us/library/ms179882.aspx,虽然它只有4位小数位(通常绰绰有余,可能不是您的案件)。 – Andrew

+0

我的字段中的数据长度是14 13我仍然得到该错误。我不确定我做错了什么。 请帮忙吗? – swathi

0

尝试......

SELECT LEN(YourColumn) 
FROM YourTable 

然后,如果它们低于1每一次,试试这个...

SELECT CONVERT(DECIMAL(X,X-1),YourColumn) 

其中X是什么在LEN语句返回。而X-1比那少了一个。

请记住,它是DECIMAL(TotalLength,Precision)所以你需要确保有足够的空间来获得总价值。

相关问题