一,关于nvl/nvl2函数
a) NVL( expr1, expr2);
功能:判断expr1是否为空返回对应的值。如果expr1为NULL,则函数返回expr2的值
,否则返回expr1的值。
b) NVL2(expr1, expr2, expr3);
功能: 根据指定值是否为 NULL 返回对应的值。当expr1为 NULL 时,返回expr2。
当它不为NULL 时,返回expr1。
二,lightdb下的nvl/nvl2
因为lightdb是基于postgresql的,所以可以通过集成orafce扩展来兼容oracle, 然而原生的orafce对这两个函数的类型支持比较有限。为了更好的兼容oracle,所以我们对orafce的nvl/nvl2函数类型做了一些相应的扩展。
三,增强的nvl
1,nvl支持函数参数类型
a) nvl(Numeric Types, Character Types)
b) nvl(Character Types, Numeric Types)
c) nvl(Date/Time/timestamp Types,Character Types)
d) nvl(Character Types,Date/Time/timestamp Types)
e) nvl(Date/Time/timestamp Types,Numeric Types)
f) nvl(Numeric Types,Date/Time/timestamp Types)
g) nvl(text,clob)
h) nvl(clob,text)
2,用法示例
a) select nvl(1, 'ab'::text);
nvl
-----
ab
(1 row)
b) select nvl('2022-01-01'::date, '1'::text);
nvl
------------
2022-01-01
(1 row)
c) select nvl(null::date, '1'::text);
nvl
-----
1
(1 row)
4,增强的nvl2
1,nvl2支持函数参数类型
a) nvl2(Numeric Types, Character Types, Character Types);
b) nvl2(Character Types, Numeric Types, Numeric Types);
c) nvl2(Date/Time/timestamp Types, Character Types, Character Types);
d) nvl2(Character Types, Date/Time/timestamp Types, Date/Time/timestamp Types);
e) nvl2(Date/Time/timestamp Types, Numeric Types, Numeric Types);
f) nvl2(Numeric Types, Date/Time/timestamp Types, Date/Time/timestamp Types);
g) nvl2(text, clob, clob);
h) nvl2(clob, text, text);
2,用法示例
a) select nvl2(1.1, 'a'::text, 'b'::text);
nvl2
------
a
(1 row)
b) select nvl2('2022-01-01'::date,'1'::text, '2'::text);
nvl2
------
1
(1 row)
c) select nvl2(null, '2022-01-01'::date, '2022-01-03'::date);
nvl2
------------
2022-01-03
(1 row)
5,其他说明
目前对nvl/nvl2的虽然已经能满足绝大部分的场景,但仍然有限,后续将视需要再做扩展,争取做到对oracle实现100%的兼容。