Sql 如果不起作用,则为空

Sql 如果不起作用,则为空,sql,oracle,Sql,Oracle,当v2为null时,我的null如果似乎不起作用,我有这个权利吗 选择舍入(v1/NULLIF(v2,0),3) 从t1开始 其中id=100 例如:当V1=58且V2为null时,结果应为58,但返回null。您混淆了NULLIF()和COALESCE()。您的表达式用于防止被零除是正确的。在这种情况下使用它是完全正确的,而且它工作正常 如果要将NULL值视为1,可以执行以下操作: SELECT ROUND(v1 / (CASE WHEN v2 IS NULL THEN 1

当v2为null时,我的null如果似乎不起作用,我有这个权利吗

选择舍入(v1/NULLIF(v2,0),3)
从t1开始
其中id=100


例如:当V1=58且V2为null时,结果应为58,但返回null。

您混淆了
NULLIF()
COALESCE()
。您的表达式用于防止被零除是正确的。在这种情况下使用它是完全正确的,而且它工作正常

如果要将
NULL
值视为
1
,可以执行以下操作:

SELECT ROUND(v1 / (CASE WHEN v2 IS NULL THEN 1
                        WHEN v2 <> 0 THEN v2
                   END), 3)
FROM t1
WHERE id = 100;
选择舍入(v1/(v2为空时为1)
当v20时,则v2
(完),3)
从t1开始
其中id=100;
对我来说,这似乎是一个奇怪的逻辑。

请尝试以下方法:

SELECT ROUND (v1/ COALESCE(v2,1), 3)
FROM FROM t1 
WHERE id = 100;

我想,如果它也能处理v2=0的情况,这会更好一些。@Alan。是的。如果所有条件都不匹配,
case
返回
NULL
。@GordonLinoff我想我有点糊涂了,我的V1是年龄字段,V2是年龄单位转换为年的乘法因子。当V1以年为单位时,V2为空。在我的例子中,nullif是否返回null?如果是这样,结果不是应该是58吗?@Skn。任何时间
NULL
都是
NULL