本文介绍了NULL值相关的函数的语法、参数以及示例等内容。
NANVL
描述
该函数用于判断n1是否为NaN(非数字),并返回结果。
如果
n1为NaN,则函数返回n2。如果
n1是数字,则函数返回n1。
语法
NANVL(n1, n2)参数
参数 | 说明 |
n1 | 仅支持 |
n2 | 仅支持 |
返回类型
返回BINARY_FLOAT或者BINARY_DOUBLE类型。
示例
CREATE TABLE float_point_demo (bf BINARY_FLOAT,bd BINARY_DOUBLE);
INSERT INTO float_point_demo VALUES (123.456,'NaN');
INSERT INTO float_point_demo VALUES ('NAN',123.456);
SELECT * FROM float_point_demo;
bf | bd
---------+---------
123.456 | NaN
NaN | 123.456
SELECT NANVL(bf,0) "nanvl_1", NANVL(bd,0) "nanvl_2" FROM float_point_demo;
nanvl_1 | nanvl_2
---------+---------
123.456 | 0
0 | 123.456NVL2
描述
该函数用于根据指定的表达式是否为NULL来确定查询返回的值。
如果
expr1不为NULL,则NVL2返回expr2。如果
expr1为NULL,则NVL2返回expr3。
语法
NVL2(expr1, expr2, expr3)参数
参数 | 说明 |
expr1 | 可以为任意数据类型。 |
expr2 | 可以为除 |
expr3 | 可以为除 |
返回类型
如果
expr2和expr3的数据类型相同,则返回该相同的数据类型。如果
expr2和expr3的数据类型不同:如果
expr2是字符数据,则数据库在比较它们之前将expr3转换为expr2的数据类型,除非expr3是null常量。在这种情况下,不需要进行数据类型转换。在expr2的字符集中返回VARCHAR2。如果
expr2是数字,则数据库确定哪个参数具有最高的数字优先级,将另一个参数隐式转换为该数据类型,并返回该数据类型。
示例
SELECT nvl2('A'::text, 'B', 'C') FROM DUAL;
nvl2
------
B
SELECT nvl2(NULL, 2, 3) FROM DUAL;
nvl2
------
3NVL
描述
该函数用于将查询结果中的NULL以空白形式返回来替换为字符串。
如果
expr1为NULL,则NVL返回expr2。如果
expr1不为NULL,则NVL返回expr1。
语法
NVL(expr1, expr2)参数
参数 | 说明 |
expr1 | 可以为任意数据类型。 |
expr2 | 可以为任意数据类型。 |
返回类型
参数expr1和expr2可以为任何数据类型。
如果它们的数据类型不同,那么数据库会隐式地将其中一种转换为另一种。如果不能隐式转换,则数据库将返回一个错误。
隐式转换的实现方式如下:
如果expr1是字符数据,则数据库在比较它们之前将expr2转换为expr1的数据类型,并在expr1的字符集中返回VARCHAR2类型数据。
如果expr1是数字类型,则确定哪个参数具有最高的数字优先级,将另一个参数隐式转换为该数据类型,并返回该数据类型。
示例
SELECT nvl(NULL::text, 'B') FROM DUAL;
nvl
-----
BNULLIF
描述
NULLIF比较expr1和expr2。
语法
NULLIF(expr1, expr2)参数
参数 | 说明 |
expr1 | 可以为任意数据类型。 |
expr2 | 可以为任意数据类型。 |
返回类型
如果
expr1和expr2相等,则函数返回NULL。如果
expr1和expr2不相等,则函数返回expr1。
示例
SELECT nullif('a','') FROM DUAL;
nullif
--------
a
select nullif('','') FROM DAUL;
nullif
--------
LNNVL
描述
该函数用于在条件的一个或两个操作数可能为空时,提供一种评估条件的简明方法。
LNNVL可以用于任何可能出现标量表达式的地方,即使在IS[NOT]NULL、AND或OR条件无效但需要考虑潜在NULL的情况下也是如此。数据库有时会以这种方式在内部使用LNNVL函数,将NOT IN条件重写为NOT EXISTS条件。在这种情况下,EXPLAIN PLAN的输出会在计划表输出中显示此操作。条件可以计算任何标量值,但不能是包含AND、OR或BETWEEN的复合条件。
语法
LNNVL(condition)参数
参数 | 说明 |
condition | 输入的条件。 |
返回类型
该函数只能在查询的WHERE子句中使用,它将条件作为参数。
如果条件为FALSE或UNKNOWN,则返回TRUE。
如果条件为TRUE,则返回FALSE。
示例
create table lnnvltbl(name varchar(10), id int);
insert into lnnvltbl values(null, 1);
insert into lnnvltbl values('', 2);
insert into lnnvltbl values ('null',3);
insert into lnnvltbl values('s', 4);
insert into lnnvltbl values ('ss',5);
select * from lnnvltbl where lnnvl(name is not null) order by id;
name | id
------+----
| 1
| 2COALESCE
描述
该函数返回表达式列表中的第一个非NULL表达式。至少有一个表达式不能为NULL。如果所有出现的expr都计算为NULL,则函数返回NULL。
数据库使用短路评估。也就是说,数据库评估每个expr值并确定它是否为NULL,而不是在确定其中任何一个是否为NULL之前评估所有expr值。
语法
COALESCE(expr [, expr]...)参数
参数 | 说明 |
expr | 可以是数字数据类型或者是字符数据类型的值或表达式。 |
返回类型
如果所有出现的expr都是数字数据类型或任何可以隐式转换为数字数据类型的非数字数据类型,则数据库将确定具有最高数字优先级的参数,隐式将其余参数转换为该数据类型,并返回该数据类型。
示例
SELECT coalesce(null,3.934,1) FROM DUAL;
coalesce
----------
3.934
select coalesce(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1) FROM DUAL;
coalesce
----------
1