SQL Bigint *十进制

时间:2016-03-21 21:02:41

标签: sql sql-server decimal bigint

这看起来很简单,但我无法弄清楚。我有一个数据类型为bigint的字段,我试图将它乘以另一个十进制字段(9,5),但我在所有计算中都得到null。我已经尝试将Bigint转换为十进制,但它也不起作用。我错过了什么?

我相信我使用的是SQL Server 2000。我引用了在一个公共字段上加入的两个不同表格中的数字。

((cast([costs] as decimal(9,5)) * cast([Ratio] as decimal(9,5))) as [Cost Ratio]

我还添加了isnull(比率,0),现在它用0.00000填充我的空值,但仍然没有得到[成本比率]字段中的乘积值。

enter image description here

1 个答案:

答案 0 :(得分:2)

您应该获得算术异常,而不是空值。您正在将BigInt值转换为decimal(9,5),其精度= 9 scale = 5,在小数的左侧只留下4位数。您BigInt列中的所有值都至少为6位数或更大。这意味着decimal(9,5)中没有足够的空间来存储那个大的int值。对于查询中的类型,请尝试decimal(18,5),在小数点左侧留出足够的空间。

另外,不要忘记ISNULL(数据中的值可以为null),并且如果它为null,则期望得到0的结果。

((cast([ISNULL(costs,0)] as decimal(18,5)) * cast([ISNULL(Ratio,0)] as decimal(18,5))) as [Cost Ratio]

此外,如果您的Ratio列类型已经是decimal(9,5),那么请不要再次转换,请添加ISNULL检查,如果它是可以为空的列。

有关sql server十进制类型的更多详细信息,请参阅:Sql Server Decimals。我选择18作为精度的原因与存储有关。