本文介绍了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.456
NAL2
描述
该函数用于根据指定的表达式是否为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
------
3
NVL
描述
该函数用于将查询结果中的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
-----
B
NULLIF
描述
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
| 2
COALESCE
描述
该函数返回表达式列表中的第一个非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