SQL Server 2012资金数据类型问题

时间:2016-02-11 22:26:45

标签: sql sql-server sql-server-2012 sqldatatypes

我正在使用这个公式

(p.Price - i.Price) * q.Qty
SQL Server 2012中的

p.Price值为0或nullp.Pricei.Price的数据类型为moneyq.Qtyint

所以,如果计算是(0-10.00) * 50 = -500.00(它是一个负数,因为它是按计划购买的产品),但我的数据表中总是得到0或null。

更新:

 (sum(p.Price - i.Price) * q.Qty) 

但是我在选择列表中收到了无效,因为它没有包含在聚合或group by子句中?

1 个答案:

答案 0 :(得分:1)

在SQL Server money中,类型可以为负数。它有这个范围:

-922,337,203,685,477.5808 to 922,337,203,685,477.5807

检查您的数据和公式,它应该按预期工作:

DECLARE @m1 money = 0;
DECLARE @m2 money = 10;
DECLARE @qty int = 50;

SELECT (@m1 - @m2) * @qty

<强>结果

(No column name)
-500.00

如果值可以为NULL,则可以使用ISNULL将它们变为零:

DECLARE @m1 money = NULL;
DECLARE @m2 money = 10;
DECLARE @qty int = 50;

SELECT (ISNULL(@m1,0) - ISNULL(@m2, 0)) * ISNULL(@qty, 0)

<强>结果

(No column name)
-500.00