添加NULL值

时间:2009-11-20 10:39:29

标签: sql null

在存储过程(在我的情况下为Oracle)中,我想向现有记录添加一些值。问题是现有值和要添加的值都可以为空。我只希望当两个操作数都为null时结果为NULL。如果只有其中一个为null,我希望结果是另一个操作数。如果两者都是非null,我希望结果是“正常”添加。

这是我到目前为止所使用的内容:

SELECT column INTO anz_old FROM aTable Where <someKeyCondition>;
IF anz_old IS NULL
THEN
    anz_new := panzahl;
ELSE
    anz_new := anz_new + NVL (panzahl, 0);
END IF;
UPATE aTabel set column = anz_new Where <someKeyCondition>;

是否有更优雅的方式(最好是完全在SQL中,即只是在一个更新语句中,而不是长CASE-Statement,其逻辑与上面的代码基本相同)?

5 个答案:

答案 0 :(得分:52)

如果你想添加a和b并且其中一个可能为null,你可以使用coalesce,它返回你传递的第一个非null参数:

coalesce(a+b, a, b)

所以在这种情况下,如果两个参数都不为null,它将返回总和。如果只有b为空,它将跳过a + b并返回a。如果a为null,它将跳过a + b和a并返回b,如果它们都为null,则只返回null。

如果你希望答案为0而不是null如果a和b都为null,你可以传递0作为最后一个参数:

coalesce(a+b, a, b, 0)

请注意@erwins answer - null可能不适合使用。

答案 1 :(得分:9)

我用这种方式完成了它:

coalesce("Column1",0.00) + coalesce("Column2",0.00)

我正在使用前端高级管理员....他们不明白为什么NULL和0不会以同样的方式处理。

在我的情况下,它可以工作,只需用0.00替换NULL ...但可能不是全部:)

答案 2 :(得分:7)

在SQL中,Null应该是一个说“我不知道”的状态。

如果你不知道b是多少,那么你也不知道a + b是多少,并且在这种情况下假装a + b = a是误导。

答案 3 :(得分:5)

你也可以使用ISNULL,所以如果你有3个值

isnull(val1,0)+isnull(val2,0)+isnull(val3,0)

哪个列将具有NULL将使用0,否则使用其原始值。

答案 4 :(得分:0)

在SQL术语中,当添加数字时,结果为NULL表示未添加任何非空数字。

这表明用SQL术语得出的明智答案是

如果A为NULL而B为NULL则为NULL ELSE ISNULL(A,0)+ ISNULL(B,0)结束