我知道过去曾再次提出过类似的问题,但我认为我的情况略有不同。我有一个具有对数值的列,我尝试使用以下公式反转它们:
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
。
答案 0 :(得分:2)
此处的问题是您的第一个输入参数(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
。