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

时间:2009-06-17 03:52:33

标签: sql tsql null sum

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

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

您可以假设所有表格都已正确设置。

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

如何确保找不到记录,返回0而不是NULL?

8 个答案:

答案 0 :(得分:95)

大多数数据库服务器都有一个COALESCE函数,该函数将返回非空的第一个参数,因此以下内容可以执行您想要的操作:

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

[编辑]

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

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

请注意,where子句会排除sys.columns中的所有行,但是'sum'运算符仍然会返回一行为null的行,它将修复合并为一行为0。 / p>

我希望这有助于解释它。

答案 1 :(得分:13)

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

这应该可以解决问题。

答案 2 :(得分:11)

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

答案 3 :(得分:6)

编辑:看起来其他人都打败了我哈哈

找到答案。

ISNULL()确定当您具有空值时要执行的操作。

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

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

答案 4 :(得分:6)

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

如果表在响应中有行,则返回SUM(Price)。如果SUM为NULL或没有行,则返回0.

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

答案 5 :(得分:4)

您可以使用

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

我99%肯定会起作用。

答案 6 :(得分:1)

ORACLE / PLSQL:

NVL FUNCTION

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

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

答案 7 :(得分:-5)

最简单的方法是在结果中添加零。

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

希望这会有所帮助!!