📜  SQL 通用函数 | NVL、NVL2、解码、合并、NULLIF、LNNVL 和 NANVL(1)

📅  最后修改于: 2023-12-03 15:05:19.328000             🧑  作者: Mango

SQL 通用函数

SQL 通用函数是能够在不同数据库平台上使用的函数,本文将介绍以下函数:

  • NVL
  • NVL2
  • 解码
  • 合并
  • NULLIF
  • LNNVL
  • NANVL
NVL

NVL 函数用于将一个 NULL 值替换为另一个值。

使用语法:NVL(expr1,expr2)

其中:

  • expr1:要被检查的表达式
  • expr2:要返回的值

如果 expr1 不为 NULL,则 NVL 返回 expr1 的值;如果 expr1 为 NULL,则返回 expr2 的值。

SELECT NVL(NULL, 'Hello') as result1, 
       NVL('World', 'Hello') as result2
FROM dual;

上述代码将返回以下结果:

| RESULT1 | RESULT2 | |---------|---------| | Hello | World |

NVL2

NVL2 函数根据第 1 个表达式是否为 NULL 来返回第 2 个或第 3 个表达式。

使用语法:NVL2(expr1, expr2, expr3)

其中:

  • expr1:要被检查的表达式
  • expr2:如果 expr1 不为 NULL,则返回的表达式
  • expr3:如果 expr1 为 NULL,则返回的表达式
SELECT NVL2(NULL, 'Hello', 'World') as result1,
       NVL2('Oracle', 'Database', 'World') as result2
FROM dual;

上述代码将返回以下结果:

| RESULT1 | RESULT2 | |---------|-----------| | World | Database |

解码

解码函数是 Oracle 特定的函数,它在其他数据库中可能不存在或者有不同的实现方式。解码函数可根据第 1 个表达式的值返回第 2 个、第 3 个、第 4 个等表达式。

使用语法:DECODE(expr, search, result [, search, result]... [, default])

其中:

  • expr:要被检查的表达式
  • search:要被检查的值
  • result:如果 expr 等于 search,则返回的表达式
  • default:可选参数,如果没有任何一个 search 值和 expr 相等,则返回 default 表达式(默认为 NULL)
SELECT DECODE('Oracle', 'Oracle', 'Database', 'MySQL', 'RDBMS') as result1,
       DECODE(3, 1, 'One', 2, 'Two', 'Unknown') as result2,
       DECODE(5, 1, 'One', 2, 'Two', 'Unknown') as result3
FROM dual;

上述代码将返回以下结果:

| RESULT1 | RESULT2 | RESULT3 | |----------|---------|-----------| | Database | Unknown | Unknown |

合并

合并函数将多个列或表中的值合并为一个结果。

SELECT CONCAT('Hello', ' ', 'World') as result1,
       CONCAT_WS('-', '2021', '10', '06') as result2
FROM dual;

上述代码将返回以下结果:

| RESULT1 | RESULT2 | |---------------|-------------| | Hello World | 2021-10-06 |

NULLIF

NULLIF 函数用于比较两个表达式是否相等,如果相等则返回 NULL,否则返回第一个表达式的值。

使用语法:NULLIF(expr1, expr2)

其中:

  • expr1:要被检查的表达式
  • expr2:要进行比较的表达式
SELECT NULLIF('Hello', 'Hello') as result1,
       NULLIF('Oracle', 'Attractions') as result2
FROM dual;

上述代码将返回以下结果:

| RESULT1 | RESULT2 | |---------|---------| | NULL | Oracle |

LNNVL

LNNVL 函数返回一个逻辑 NOT(NOT 运算符)并且将值转换为 NULL。如果表达式是 NULL 或 FALSE,则该函数返回 TRUE;否则,返回 FALSE。

使用语法:LNNVL(condition)

其中:

  • condition:要进行 NOT 运算的条件表达式
SELECT LNNVL(1 < 2) as result1,
       LNNVL(NULL) as result2
FROM dual;

上述代码将返回以下结果:

| RESULT1 | RESULT2 | |---------|---------| | FALSE | TRUE |

NANVL

NANVL 函数用于将数值列或数值类型参数中的值 NaN 替换为所提供的值。如果传入的值不是 NaN,则该函数返回该值。

使用语法:NANVL(expr1, expr2)

其中:

  • expr1:要被检查的数值表达式
  • expr2:要返回的值
SELECT NANVL(10/0, -999) as result1,
       NANVL(10/2, -999) as result2
FROM dual;

上述代码将返回以下结果:

| RESULT1 | RESULT2 | |---------|---------| | -999 | 5 |

总结

本文介绍了 SQL 中的通用函数 NVL、NVL2、解码、合并、NULLIF、LNNVL 和 NANVL。这些函数是跨不同数据库平台通用的,可以帮助程序员更高效地处理数据。