是否有更好的Oracle运算符进行空安全等式检查?

Lou*_*hys 2 sql oracle plsql

根据这个问题,在Oracle中执行相等性检查的方法,我想将null视为等于null就像是

SELECT  COUNT(1)
  FROM    TableA
WHERE 
  wrap_up_cd = val
  AND ((brn_brand_id = filter) OR (brn_brand_id IS NULL AND filter IS NULL))
Run Code Online (Sandbox Code Playgroud)

这实际上可以使我的代码变脏,特别是如果我有很多这样的地方,并且where应用于多个列.有更好的选择吗?

Bri*_*ire 5

好吧,我不确定这是否更好,但使用它可能稍微简洁LNNVL,一个函数(你只能在一个WHERE子句中使用),TRUE如果给定的表达式是FALSEUNKNOWN(NULL)则返回.例如...

WITH T AS
(
    SELECT    1 AS X,    1 AS Y FROM DUAL UNION ALL
    SELECT    1 AS X,    2 AS Y FROM DUAL UNION ALL
    SELECT    1 AS X, NULL AS Y FROM DUAL UNION ALL
    SELECT NULL AS X,    1 AS Y FROM DUAL
)
SELECT
    *
FROM
    T
WHERE
    LNNVL(X <> Y);
Run Code Online (Sandbox Code Playgroud)

...将返回除X = 1和Y = 2之外的所有行.