在SQL Server2008中转换为bigint时,我遇到了算术溢出问题。下面的内容让我感到困惑。
这是可行的:
select 58356453 * 228204732751答案: 13317218761161292203
但是,所有其他涉及显式转换的尝试都会失败。
select convert(bigint, 58356453 * 228204732751)结果:算术溢出
begin
declare @key bigint = 58356453,
@workingVal bigint,
@primeMultiplier1 bigint = 228204732751;
set @workingVal = @key * @primeMultiplier1;
end;结果:算术溢出
这里我漏掉了什么?我也尝试过"cast(BigNumber as bigint)“(我不认为它与convert有什么不同),以及算术运算之前/之后的各种转换组合。
这是在Windows Server2008 x64上
发布于 2010-12-15 04:52:01
bigint的最大值为
9223372036854775807
你要回来了
13317218761161292203。
我建议将其转换为具有足够精度的小数。
发布于 2010-12-15 04:56:51
您应该使用numeric datatype。
select cast(13317218761161292203 as numeric(38))https://stackoverflow.com/questions/4443991
复制相似问题