SQL 大整数*小数

SQL Bigint*Decimal

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

我相信我正在使用 SQL Server 2000。我引用的是连接在一个公共字段上的两个不同表中的数字。

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

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

您应该得到算术异常,而不是空值。您正在将 BigInt 值转换为 decimal(9,5),其精度 = 9 比例 = 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 服务器十进制类型的更多详细信息,请参阅:Sql Server Decimals。我选择 18 的原因是精度与存储有关。