【问题标题】:Arithematic Overflow : "Converting numeric to data type numeric" error算术溢出:“将数字转换为数据类型数字”错误
【发布时间】:2021-10-29 01:13:47
【问题描述】:

有两列的数据类型为 Decimal (16,4)

  1. OwnedShares
  2. TotalOutstandingShares

我正在尝试使用这两列计算百分比,然后将其转换为 Decimal(7,4)。

正在使用的代码:

Convert(Decimal(7,4),Case when OwnedShares = 0 or TotalOutstandingShares = 0 then 0 else ((OwnedShares/TotalOutstandingShares)*100) end)

我收到错误消息:“将数字转换为数字数据类型的算术溢出错误。”

谁能帮我弄清楚我哪里出错了?

【问题讨论】:

  • 语法不正确。 CONVERT(expression, datatype),不落后。
  • @Akina,我认为语法没有任何错误。 T-SQL 中 CONVERT 函数的语法是 CONVERT (data_type [(length)], expression [, style])。我从docs.microsoft.com/en-us/sql/t-sql/functions/… 验证了这一点
  • :facepalm: 如果是这样,那么为什么这个问题被标记为与 MySQL 相关?删除不相关的标签...完成。
  • 您的记录似乎包含大量的 OwnedShares 和少量(但不为零)的 TotalOutstandingShares。 sp_decribe_first_result_set 认为你需要一个decimal(38,18) 来保存(OwnedShares/TotalOutstandingShares)*100 的结果。另请参阅:Precision, scale, and Length.
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: sql-server type-conversion sqlcode


【解决方案1】:

如果您遇到算术溢出错误,那么您的百分比计算可能会返回至少一条大于 100.0000(或 100%)的记录。尝试增加decimal's precision 以增加可以存储的位数,直到错误不再发生,例如DECIMAL(8,4) 或更大。

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多