bdc*_*der 4 sql sql-server bigint sql-server-2008-r2
输入以下查询时使用SQL Server 2008 R2:
SELECT CAST(POWER(2.0, 63.0) AS BIGINT);
Run Code Online (Sandbox Code Playgroud)
结果如下:
9223372036854775800
Run Code Online (Sandbox Code Playgroud)
但是,使用Windows桌面计算器并将2提高到63会产生:
9223372036854775807
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这个区别 - 或者SQL Server正在进行一些内部转换?......或者我错过了别的什么?
BIGINTMS Sql Server 的范围是:
-2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807)
Run Code Online (Sandbox Code Playgroud)
而且你的计算器给你错误的数字,因为2 ^ 63的最右边的数字不能有一个奇数.
POWERSQL Server中的函数(http://technet.microsoft.com/en-us/library/ms174276.aspx)返回与其第一个参数相同的类型.
编写此查询的正确方法是:
DECLARE @foo REAL = 2.0
SELECT CAST(POWER( @foo, 63.0 ) AS BIGINT)
Run Code Online (Sandbox Code Playgroud)
通过它,您将收到Arithmetic overflow error converting expression to data type bigint.错误消息.关于http://www.extremeoptimization.com/resources/Articles/FPDotNetConceptsAndFormats.aspx的原因
关于为什么POWER函数返回错误的数字的问题?正如@simonatrcl在他的回答中提到的,浮点数存在算术问题,有时会导致无效结果.您可以在这里阅读浮点数及其问题:
http://www.extremeoptimization.com/resources/Articles/FPDotNetConceptsAndFormats.aspx
您还可以在此处检查MS Sql Server中整数类型的边界:http: //technet.microsoft.com/en-us/library/ms187745.aspx
| 归档时间: |
|
| 查看次数: |
11880 次 |
| 最近记录: |