oracle中如何比较单条语句中的空值和非空值?

how to compare null and non null values in single statement in oracle?

我正在尝试在某个 where 条件满足时获取行

select * from users where userid = :userid and objnum = :objnum;

users table 有 userid(不可为 null 的列)和 objnum(可为 null 的列)。 现在,当我想获取具有空 "objnum" 值的用户时,它不起作用,因为当我想获取 objnum 值 = 1 时,空值不是 comparable.And,然后在上面会工作。

对于 null 值,我可以通过以下查询很好地获得结果。

select * from users where userid = :userid and objnum is null;

但我的应用程序代码将 :objnum 绑定变量作为 null 或整数值 发送,我想直接在单个 query.Is 中检查它在单个查询中执行此操作?

如果您想将列值与绑定变量进行比较,并让它们匹配 NULL 和非 NULL 值,那么您需要比较 NULL 值双方 NULL:

SELECT *
FROM   users
WHERE  (userid = :userid OR (userid IS NULL AND :userid IS NULL))
AND    (objnum = :objnum OR (objnum IS NULL AND :objnum IS NULL));