如何从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;
希望这可以帮助!!