在存储过程(在我的情况下为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>;
Run Code Online (Sandbox Code Playgroud)
是否有一种更优雅的方式(最好是完全在SQL中,即只是在一个更新语句中,缺少长CASE-Statement,其逻辑与上面的代码基本相同)?
rjm*_*nro 58
如果要添加a和b并且其中一个可能为null,则可以使用coalesce,它返回传递它的第一个非null参数:
coalesce(a+b, a, b)
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,如果两个参数都不为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)
Run Code Online (Sandbox Code Playgroud)
请考虑@erwins的回答 - null可能不适合使用.
小智 10
我这样做了:
coalesce("Column1",0.00) + coalesce("Column2",0.00)
Run Code Online (Sandbox Code Playgroud)
我正在使用前端高级管理员......他们不明白为什么NULL和0不会以同样的方式处理.
在我的情况下,它的工作原理,只是用0.00替换NULL ...可能不是全部:)
在SQL中,Null应该是一个说"我不知道"的状态.
如果你不知道b是多少,那么你也不知道a + b是多少,并且在这种情况下假装a + b = a是误导性的.
您也可以使用ISNULL,因此如果您有3个值
isnull(val1,0)+isnull(val2,0)+isnull(val3,0)
Run Code Online (Sandbox Code Playgroud)
哪个列将具有NULL将使用0,否则使用其原始值.
| 归档时间: |
|
| 查看次数: |
46818 次 |
| 最近记录: |