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

问题描述 投票:0回答:1

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

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

sql-server t-sql casting logarithm arithmetic-overflow
1个回答
8
投票

这里的问题是你的第一个输入参数(

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

© www.soinside.com 2019 - 2024. All rights reserved.