Oracle中nvl()与nvl2()函数详解:
- 函数nvl(expression1,expression2)根据参数1是否为null返回参数1或参数2的值;
- 函数nvl2(expression1,expression2,expression3)根据参数1是否为null返回参数2或参数3的值。
1.nvl:根据参数1是否为null返回参数1或参数2的值
【函数格式】:nvl(expression1,expression2)
【函数说明】:
- 若expression1值为null,则该函数返回expression2;
- 若expression1值不为null,则该函数返回expression1;
- 若expression1、expression2的值均为null,则该函数返回null。
【特别说明】:参数expression1和expression2可以是字符型、数字型或日期型,但参数expression1与expression2的类型必须一致。
【样例展示一】:expression1值为null:
expression2为字符型:
expression2为数值型:
expression2为日期时间型:
【样例展示二】:expression1值不为null:
expression1为字符型:
expression1为数值型:
expression1为日期时间型:
【样例展示三】:expression1、expression2值均为null:
2.nvl2:根据参数1是否为null返回参数2或参数3的值
【函数格式】:nvl2(expression1,expression2,expression3)
【函数说明】:
- 若expression1值不为null,则该函数返回expression2值;
- 若expression1值为null,则该函数返回expression3值;
- 若expression1、expression2、expression3值均为null,则该函数返回null。
【特别说明】:
- expression1的类型不需要与expression2和expression3的类型保持一致;
- expression2与expression3的类型尽量保持一致,若不一致,当expression1为null时,则expression3会自动转换为expression2的类型,若两个数据类型之间无法转换,则会报错。
【样例展示一】:expression1值不为null:
expression2和expression3均为字符型:
expression2和expression3均为数值型:
expression2和expression3数据类型不一致:
注意:此时expression1有值,因此该函数直接返回expression2的值,即使expression3的类型无法转换为expression2的类型也不会报错。
【样例展示二】:expression1值为null:
expression2和expression3均为字符型:
expression2和expression3均为数值型:
expression2和expression3数据类型不一致:
注意:此时expression1值为null,因此该函数会返回expression3的值,若expression3的类型无法转换为expression2的类型,则会报错。