如何从SQL函数获取单个值时将NULL更改为0?

我有一个查询,计算两个date之间的所有项目的价格。 这里是select语句:

SELECT SUM(Price) AS TotalPrice FROM Inventory WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 

你可以假设所有的表都已经设置好了。

如果我在两个date之间进行select,并且在该date范围内没有项目,则该函数将返回NULL作为TotalPrice而不是0。

我怎样才能确保如果没有logging被发现,返回0而不是NULL?

大多数数据库服务器都有一个COALESCE函数,它将返回非空的第一个参数,所以下面的代码应该做你想要的:

 SELECT COALESCE(SUM(Price),0) AS TotalPrice FROM Inventory WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 

[编辑]

只是为了澄清事情,因为似乎有很多关于“COALESCE / ISNULL将仍返回NULL,如果没有行匹配”的讨论,试试这个查询,你可以直接复制并粘贴到SQL Server中:

 SELECT coalesce(SUM(column_id),0) AS TotalPrice FROM sys.columns WHERE (object_id BETWEEN -1 AND -2) 

请注意,where子句从sys.columns中排除了所有行,但“sum”运算符仍然导致返回单个行为null,这会将修复程序合并为具有0的单个行。

我希望这有助于解释它。

 SELECT ISNULL(SUM(Price), 0) AS TotalPrice FROM Inventory WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 

这应该够了吧。

 SELECT 0+COALESCE(SUM(Price),0) AS TotalPrice FROM Inventory WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 

编辑:看起来像其他人打我,哈哈

find答案。

当你有一个空值时, ISNULL()决定要做什么。

在这种情况下,我的函数返回一个空值,所以我需要指定一个0来代替。

 SELECT ISNULL(SUM(Price), 0) AS TotalPrice FROM Inventory WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 
 SELECT COALESCE( (SELECT SUM(Price) AS TotalPrice FROM Inventory WHERE (DateAdded BETWEEN @StartDate AND @EndDate)) , 0) 

如果表中有响应的行,则返回SUM(Price)。 如果SUM是NULL或没有行,它将返回0。

如果没有find行,放置COALESCE(SUM(Price),0)在MSSQL中不起作用。

你可以使用

SELECT ISNULL(SUM(ISNULL(Price, 0)), 0)

我99%肯定会工作。

ORACLE / PLSQL:

NVLfunction

 SELECT NVL(SUM(Price), 0) AS TotalPrice FROM Inventory WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 

如果SUM(Price)返回空值,则此SQL语句将返回0 否则,它将返回SUM(Price)值。

最简单的方法就是将结果加上零。

 $A=($row['SUM'Price']+0); echo $A; 

希望这可以帮助!!