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

标签 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

最佳答案

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

关于sql-server - int 类型的算术溢出错误,值 = 4957500001.400178,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833574/

相关文章:

C++ : Send an object through a named pipe

c# - Asp.net C# SQL Server 更新查询不适用于所有列

C# 如何将值从 sql 数据库存储到对象

sql-server - 是否可以编写查询来查找没有 JOIN 和 ORDER BY 的最大记录?

sql - 选择记录等于 y 但不等于 x 的用户

c# - 是否有将 T-SQL 存储过程转换为 C# 的工具?

大小写内的 C++ 类型转换常量字符串

sql - 使用 SELECT 的 SQL Server 变量赋值中的执行顺序

sql - T-SQL 中的 CALL 和 EXEC 有什么区别?

ios - 将 NSPersistentStoreResult 转换为数组