首先采取kludge解决方案,哨兵方法(你的程序不应该允许输入哨兵值):
select coalesce(a, -2147483648) = coalesce(b, -2147483648) as is_equal -- a little postgresism
假设您忘记阻止程序上的标记值,用户在B字段上输入-2147483648,A为空。上面的代码报告为true,如果报告为false,则不应报告true或null。
比较可空字段上的相等性最简洁的方法是什么? A == B应该只报告真或假,无论字段是否可以为空。
答案 0 :(得分:10)
可能IS [NOT] DISTINCT FROM会在这里提供帮助。
答案 1 :(得分:0)
运营商< =>在其他数据库引擎中做你想做的事;是不是在postgres?否则,a is null and b is null or (a is not null and b is not null and a == b)
应该有效。这是有效的,因为FALSE AND NULL
是FALSE
。