我怎样才能从SQL函数获取单个值时改变NULL为0?(How can I change NULL t

2019-07-28 20:06发布

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

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

你可以假设所有的表都被正确设置。

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

我怎样才能确保如果不找到任何记录,0被退回,而不是空?

Answer 1:

大多数数据库服务器有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排除所有的行,但“和”运营商仍然导致单行正在返回null,它凝聚修复是一个单行0。

我希望这有助于解释它。



Answer 2:

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

这应该够了吧。



Answer 3:

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


Answer 4:

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

如果表中的响应具有排它返回SUM(价格)。 如果SUM是NULL或没有行,则返回0。

把COALESCE(SUM(价格),0)不MSSQL,如果没有行找到了工作。



Answer 5:

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

找到了答案。

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

在这种情况下,我的功能,所以我需要指定一个0而不是返回返回空值。

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


Answer 6:

你可以使用

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

我99%肯定会工作。



Answer 7:

ORACLE / PLSQL:

NVL函数

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

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



Answer 8:

要做到这一点最简单的方法就是零添加到您的结果。

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

希望这可以帮助!!



文章来源: How can I change NULL to 0 when getting a single value from a SQL function?
标签: sql tsql null sum