我知道过去曾有人问过类似的问题,但我认为我的情况略有不同。我有一个具有对数值的列,我正在尝试使用以下公式反转它们:
SELECT POWER(10,CAST(9.695262723 AS NUMERIC(30,15)))
假设值 9.695262723
是该列的值之一。
尝试运行此查询时,我收到 Arithmetic overflow error for type int, value = 4957500001.400178
。
另一方面,相同的查询对于较小的值也能正常工作,例如SELECT POWER(10,CAST(8.662644523 AS NUMERIC(30,15)))
我怎样才能克服这个错误并计算我拥有的 log10 条目的倒数?仅供引用,表中存在的更大值(以 log10 为单位)是 12.27256096
。
最佳答案
这里的问题是您的第一个输入参数 (10
) 默认情况下,SQL 服务器会将其视为数据类型 int
。int
最大值为2^31-1(2,147,483,647),而4,957,500,001这个数字远大于这个,所以需要用到bigint
:
SELECT POWER(CONVERT(bigint,10),CONVERT(numeric(30,15),9.695262723));
编辑:如果您需要保留小数位,请使用具有足够大的标度和精度的 numeric
,而不是 bigint
。
关于sql-server - int 类型的算术溢出错误,值 = 4957500001.400178,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833574/