使用NVL的时候只能对值进行是否为空的判断,基本语法是NVL( 值1, ,结果oracle账号2)。它的功能是如果值1为空,则此函数返回结果2,不为空的话直接输出值1(如果两个参数都为空,那么还是返回空);
NVL2我理解为NVL的升级版,基本语法是NVL2(值1,结果3,结果2),多了一个结果3在中间,功能是当值1不为空的时候,此函数返回结果3,如果写成NVL2(值1,结果1,结果2),那么效果就等同于NVL(值1,结果2)了;
DECODE函数再次升级,基本表达式DECODE(值1,条件1,结果1,条件2,结果2,条件N,结果N…..,值X)。它的功能是当值1等于条件1的时候,输出结果1,等于条件2的时候,输出结果2,等于条件N的时候,输出结果N,所有条件值都不等的时候,输出值X。
CASE WHEN 基本功能与DECODE相似,不过比DECODE有着更复杂的条件判断,基本语法(CASE WHEN 值1=条件1 THEN 结果1,CASE WHEN 值2=条件2 THEN 结果2,CASE WHEN 值N=条件N THEN 结果N….ELSE 结果X END ),与DECODE不同的是,其中的条件值1=条件1可以改成其他判断条件,比如>=,<,<=,<>,is null,is not null 等的判断。
以我个人的见解是,能用NVL就不用NVL2,能用NVL2就不用DECODE,能用DECODE就不用CASE WHEN。