int 类型的算术溢出错误,值 = 4957500001.400178

Arithmetic overflow error for type int, value = 4957500001.400178

我知道过去曾有人问过类似的问题,但我认为我的情况略有不同。我有一个具有对数值的列,我正在尝试使用以下公式反转它们: 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 条目的倒数?仅供参考,table(log10 刻度)中存在的更大值是 12.27256096

这里的问题是您的第一个输入参数 (10),SQL 服务器默认将其视为数据类型 intint 具有最大值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