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

时间:2018-06-13 09:21:21

标签: sql-server tsql casting logarithm arithmetic-overflow

我知道过去曾再次提出过类似的问题,但我认为我的情况略有不同。我有一个具有对数值的列,我尝试使用以下公式反转它们: 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

1 个答案:

答案 0 :(得分:2)

此处的问题是您的第一个输入参数(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