【问题标题】:SQL server integer vs decimal SUMSQL Server 整数与十进制 SUM
【发布时间】:2011-12-30 01:11:28
【问题描述】:
这可能是一个新问题,但是...我正在研究 SQSH 中的一个数据库,它具有很大的整数类型值(人口属性)。当我想总结这些时,我得到了一个算术溢出异常。然后我将值转换为十进制,一切正常(没有溢出)。然而,我读到的所有地方都说整数和小数是一回事。那么为什么会这样呢?
提前致谢
【问题讨论】:
标签:
sql
sql-server
integer
decimal
sqsh
【解决方案1】:
您有一个decimal 数据类型,其精度和小数位数大于int 数据类型的最大限制。例如,decimal(18, 0) 的容量将大于 int(最高为 2147483647)。
诚然,int 只占用 4 个字节,而且您无法通过 decimal(18, 0) 之类的内容消耗更多空间。但它会让你达到int 的最大限制。
【解决方案2】:
整数类型是一个 4 字节的数字,最高可达 2,147,483,647。小数可以大大提高。两者都存储为整数,但小数允许一个值表示小数点后的数字。您也可以使用 BIGINT (9,223,372,036,854,775,807) 代替整数。
【解决方案3】:
来自在线书籍
decimal and numeric
decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )] 固定精度和
刻度数字。当使用最大精度时,有效值来自 -
10^38 +1 到 10^38 - 1。
int, bigint, smallint, and tinyint
长度为 4 个字节,存储从 -2,147,483,648 开始的数字
通过 2,147,483,647。
因此,Decimal 可以存储比 Int 更大的值。