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