#NVL2
NVL2函数从左向右判断,如果expr1非空,则返回expr2的值,如果expr1为空,则返回expr3的值。
expr1、expr2、expr3均为YashanDB认可的通用表达式。
当expr2和expr3的数据类型不相同时,函数先执行类型转换,若两个数据类型之间无法按照一定的规则进行转换则返回类型转换错误。 类型转换规则如下:
- expr2为字符型时,函数将expr3转换为expr2的数据类型(除非expr3为NULL,此时不需要进行转换),并返回该数据类型。
- expr2为数值型时,函数根据最小提升规则( TINYINT->SMALLINT->INT->BIGINT->NUMBER->FLOAT->DOUBLE ),将数值优先级低的参数类型转换为数值优先级高的参数类型,并返回该数据类型。
- expr2和expr3其中一个为空时,函数返回非空值的数据类型。
- expr2和expr3均为空时,函数返回VARCHAR数据类型。
示例
--因为第一个参数不为空,所以返回第二个参数,同时第二个参数和第三个参数之间进行隐式类型转换
SELECT NVL2(1,NOW(),'2011-04-01 12:28:03') res FROM DUAL;
RES
--------------------------------
2022-10-09 00:17:09
--因为第一个参数是空的,所以返回第三个参数,同时第二个参数和第三个参数之间进行隐式类型转换
SELECT NVL2('',NOW(),'2011-04-01 12:28:03') res FROM DUAL;
RES
--------------------------------
2011-04-01 12:28:03
--隐式类型转换失败
SELECT NVL2(null,NOW(),'an apple') res FROM DUAL;
[1:13]YAS-00008 type convert error : literal does not match format string
--INT类型转换成VARCHAR类型
SELECT NVL2(null,'an apple',124) res FROM DUAL;
RES
-----
124