Oracle LNNVL() 函数使用指南

Oracle LNNVL() 是一个内置函数,它为条件中的一个或两个操作数为空的情况提供了一种评估条件的简洁方法。如果条件为 TRUE 就返回 FALSE。如果条件为 FALSE 或者 UNKNOWN 就返回 TRUE

LNNVL() 可以用在 WHERE 子句或者 CASE 表达式的 WHEN 条件中。

LNNVL() 可以在标量表达式可以出现的任何地方使用,特别是在 IS [NOT] NULLANDOR 条件无效但需要考虑潜在空值的情况下。

Oracle LNNVL() 语法

这里是 Oracle LNNVL() 函数的语法:

LNNVL(condition)

参数

condition

必需的。 一个条件表达式。

返回值

Oracle LNNVL() 函数返回一个布尔值。如果 condition 条件为 TRUE 就返回 FALSE。如果 condition 条件为 FALSE 或者 UNKNOWN 就返回 TRUE

Oracle LNNVL() 示例

这里有几个展示了 Oracle LNNVL() 函数用法的示例。

基本用法

这里使用 UNION 操作符构建临时数据:

SELECT 1 n FROM dual
UNION ALL
SELECT 2 FROM dual
UNION ALL
SELECT 3 FROM dual
UNION ALL
SELECT NULL FROM dual;

输出:

      N
_______
      1
      2
      3
   NULL

假设您想知道小于 3 的数字,包括 NULL。以下查询仅返回小于 3 的非 NULL 数字:

SELECT
  *
FROM (
  SELECT 1 n FROM dual
  UNION ALL
  SELECT 2 FROM dual
  UNION ALL
  SELECT 3 FROM dual
  UNION ALL
  SELECT NULL FROM dual
) t
WHERE n < 3;

输出:

   N
____
   1
   2

Oracle LNNVL() 函数可以帮您做到这一切:

SELECT
  *
FROM (
  SELECT 1 n FROM dual
  UNION ALL
  SELECT 2 FROM dual
  UNION ALL
  SELECT 3 FROM dual
  UNION ALL
  SELECT NULL FROM dual
) t
WHERE LNNVL(n >= 3);

输出:

      N
_______
      1
      2
   NULL

下面的语句使用 CASE 表达式解释上面的语句是如何工作的:

SELECT
    t.n,
    CASE
        WHEN LNNVL(t.n >= 3) THEN 'TRUE'
        ELSE 'FALSE'
    END Result
FROM (
  SELECT 1 n FROM dual
  UNION ALL
  SELECT 2 FROM dual
  UNION ALL
  SELECT 3 FROM dual
  UNION ALL
  SELECT NULL FROM dual
) t;

输出:

      N RESULT
_______ _________
      1 TRUE
      2 TRUE
      3 FALSE
   NULL TRUE

结论

Oracle LNNVL() 是一个内置函数,它为条件中的一个或两个操作数为空的情况提供了一种评估条件的简单方法。如果条件为 TRUE 就返回 FALSE。如果条件为 FALSE 或者 UNKNOWN 就返回 TRUE