【问题标题】:Converting a FLOAT to an INT将 FLOAT 转换为 INT
【发布时间】:2014-04-03 17:53:09
【问题描述】:

我首先尝试使用ROUND 函数将我的数据从浮点数转换为整数。我将浮点数据四舍五入为整数,这很棒。

接下来我尝试将浮点数据从 1 列 (totexunits) 插入到另一列 int (Units)。我收到以下消息:

Msg 232, Level 16, State 3, Line 1
Arithmetic overflow error for type int, value = 5726577093.000000.

我用过这个sql:

update wkimport2 set units = CONVERT(int, totexunits)

我不确定发生了什么。我检查了数据库中的那个数字,它确实显示了任何小数位,但它的行为就像有一些小数位一样。任何人都知道我如何从totexunits 获取列来填充单位列?我被困住了。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    而不是 CASTConvertBIGINT,因为你的数字对于 int 来说太大了。见int, bigint, smallint, and tinyint

    大整数

    从 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 的整数(整数)数据 (9,223,372,036,854,775,807)。存储大小为 8 个字节。

    int

    从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整数(整数)数据。存储大小为 4 个字节。 SQL-92 int 的同义词是整数。

    【讨论】:

    • +1 但目标列也需要更改。即使将值转换为 BIGINT,它对于列来说仍然太大。
    【解决方案2】:

    int 可以容纳从 -2,147,483,648 到 2,147,483,647 的值。看起来您的值 5,726,577,093 大于 int 可以容纳的值。改用 bigint。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多