为什么 POWER(2, 32) 会抛出错误?SQL

0 sql t-sql sql-server

我尝试使用 SQL POWER 函数

SELECT POWER(2, 32)
Run Code Online (Sandbox Code Playgroud)

它返回了这个错误

消息 232,级别 16,状态 3,第 21 行
int 类型的算术溢出错误,值 = 4294967296.000000。

为什么会抛出这个错误,我该如何解决?

use*_*983 5

2SELECT POWER(2, 32)是一个int,而最大的价值int能够存储为2,147,483,647。4,294,967,296 太大了。

将您的转换intbigint.

SELECT POWER(CONVERT(bigint,2), 32);
Run Code Online (Sandbox Code Playgroud)

POWER (Transact-SQL) - 返回类型

返回类型取决于float_expression的输入类型:

Input type                              |Return type
----------------------------------------|--------------
float, real                             |float
decimal(p, s)                           |decimal(38, s)
int, smallint, tinyint                  |int
bigint                                  |bigint
money, smallmoney                       |money
bit, char, nchar, varchar, nvarchar     |float
Run Code Online (Sandbox Code Playgroud)

  • 有趣的事实:在我提交修正案之前,文档并没有这么说。他们过去常常说输出类型与输入类型相同,这仅在少数情况下是正确的,即使如此,也会对“十进制”产生可怕的误导(其中精度被破坏)。可编辑内容的时代万岁。 (3认同)