Oracle PL/SQL where 条件:不等于 0 或 null

Oracle PL/SQL where condition: not equal to 0 or null

我选择 id,它不能等于 0,值也不能是 (null)。我写道:

WHERE id IS NOT NULL (+) and id not in ('0')

我有 2 个错误

Error(9,5): PL/SQL: SQL Statement ignored

Error(38,119): PL/SQL: ORA-00933: SQL command not properly ended I change it to:

WHERE id IS NOT NULL (+) and id is not ('0')  

出现同样的错误。 WHERE 子句应该怎么写?

不应该吗

WHERE id IS NOT NULL
AND id != 0

(+) 用于外连接。你应该写:

Where nvl(Id,0)<>0

您可以将条件简化为:

WHERE id != 0

因为与 NULL 的比较(同时使用 = 或 != 运算符)的计算结果始终为 NULL(在 SQL 中被视为 "false" 条件),
因此 NULL != 0 总是评估为 FALSE 并且您可以在这种情况下跳过这部分

WHRE id != 0 AND id IS NOT NULL

Braiam 的回答 Where nvl(Id,0)<>0 虽然正确,但会阻止数据库在 id 列上使用索引,这可能会对性能产生不良影响。