【问题标题】:Arithmetic overflow error on decimal field十进制字段上的算术溢出错误
【发布时间】:2016-09-16 19:14:19
【问题描述】:

我有一个值为 0.9878786564357986540.765656787898767 的字段成本 我正在试图弄清楚这将是什么数据类型。

当我给 decimal 15,15 并尝试加载数据时,它会抛出一个错误

将 varchar 转换为数字数据类型时出现算术溢出错误。

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

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

    DECIMAL (15, 15) 表示它具有小数点后 15 位的精度,但总共只有 15 位的空间 - 因此没有空间容纳大于 1 的值。

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

    您的第一个示例中有 18 数字,所以我建议使用 DECIMAL (21, 18) 之类的数字

    DECIMAL (21, 18) 支持的值范围为:-999.999999999999999999999.999999999999999999(小数点后 18 位)。

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

    【讨论】:

    • 除非您特别不想要更多小数,否则请记住,从 10 到 19 位,该字段使用 9 个字节,从 20 到 28 使用 13 个字节,因此您可以使用 DECIMAL(28,25) (例如),使用相同数量的存储字节获得更高的精度(来源:msdn.microsoft.com/en-us/library/ms187746.aspx)。您可能还想考虑使用货币类型:msdn.microsoft.com/en-us/library/ms179882.aspx,尽管它最多只有 4 位十进制数字(通常对于货币来说绰绰有余,也许不是您的情况)。
    • 我的字段中数据的 Len 是 14 12 15 13,但我仍然收到该错误。我不确定我做错了什么。有什么帮助吗?
    【解决方案2】:

    试试这个...

    SELECT LEN(YourColumn)
    FROM YourTable
    

    那么,如果每次都低于1,试试这个……

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

    其中 X 是 LEN 语句中返回的内容。 X-1 比那个小一。

    请记住,它是DECIMAL(TotalLength,Precision),因此您需要确保有足够的空间容纳总值。

    【讨论】:

      猜你喜欢
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      相关资源
      最近更新 更多