oracle 12c 通用函数

oracle 12c 通用函数

本节主要学习内容为通用函数,包括如下图所示
这里写图片描述

NVL函数

说明
NVL为式1为NULL值以外的数是式1,NULL 值得时候则为式2

if(式1 != null) {
    式1
}else{
    式2
}

写法

NVL(式1,式2)
-----------
eg:
SELECT ename,sal,sal+NVL(comm,0)
from employees
/*当奖金为null,设置为0*/

注意

  • 式2 的类型必须和式1 的数据类型相同,oracle 隐式转换也包括。(不建议倚赖隐式转换)
    这里写图片描述

NVL2函数

说明
NVL为式1为NULL值以外的数是式2,NULL 值得时候则为式3

if(式1 != null) {
    式2
}else{
    式3
}

写法

NVL2(式1,式2,式3)
-----------
eg:
SELECT ename,sal,sal+NVL(comm,10000,0)
from employees
/*当奖金为null,设置为0,否则为10000*/

注意

  • 式2 的类型必须和式3 的数据类型相同,oracle 隐式转换也包括。(不建议倚赖隐式转换)

NULLIF函数

说明
NULLIF为式1与式2相比较,相等的情况下为NULL,不相等的情况下为式1;

if(式1 == 式2) {
    null
}else{
    式1
}

写法

NULLIF(式1,式2)
-----------
eg:
SELECT ename,sal,nullif(comm,sal/10)
from employees


SQL> select nullif(50,50) from dual;

NULLIF(50,50)
-------------

SQL> select nullif(50,30) from dual;

NULLIF(50,30)
-------------
           50

注意

  • 式1不能是文字NULL。
  • 如果两个参数都是数字数据类型,Oracle数据库将确定较高优先级参数,将其余参数隐式转换为该数据类型,然后返回该数据类型。 如果这两个参数不是数字,它们的数据类型必须相同。 如果数据类型不同,Oracle会返回一个错误。
    这里写图片描述

COALESCE函数

说明
COALESCE返回表达式列表中的第一个非NULL expr。 必须指定多个表达式。 如果所有expr的计算结果都为NULL,则该函数返回NULL。

if(式1 == null) {
    return1;
}else if(式2 == null){
    return2;
}
...
else if(式n == null) {
    return 式n;
}else{
     return null;
}

写法

COALESCE(式1,式2[,式n])
-----------
eg:
select eno,ename, nickname,coalesce(ename,nickname,to_char(eno))
from employees
/*查询名称,如果名字为空,则为昵称,如果昵称也为空,则是id*/

注意

  • 式n 类型相同,或者可以隐式转换。

CASE条件式

说明
使用CASE表达式,可以在不调用过程的情况下使用SQL … THEN … ELSE逻辑。

switch( 式 ) {
    case 条件1:
        数值1
        break;
    case 条件2:
        数值2
        break;
     ...
    default:
     break;
}

写法

CASE 式 WHEN 条件式1 THEN 数值1
       [WHEN 条件式2 THEN 数值2]
      [WHEN 条件式3 THEN 数值3...]
    ELSE 数值4
END
-----------
eg:
select ename,sal,(case  when sal < 230000 then 'A' 
                        when sal < 380000 then 'B' 
                    END) sal_level 
from employees;
/*规定不同的工资等级*/

注意

  • Oracle数据库使用短路评估。 对于搜索CASE表达式,数据库评估每个条件以确定这是否为真。 但是,如果条件成立,则不评估下一个条件。

DECODE函数

说明
DECODE将式与每个条件式逐一进行比较。如果expr等于条件式,Oracle数据库将返回相应的结果。如果找不到匹配的值,则返回默认值。如果省略默认值,则返回NULL。

switch( 式 ) {
    case 式==条件1:
        数值1
        break;
    case 式==条件2:
        数值2
        break;
     ...
    default:
     null
     break;
}

写法

DECODE (式,条件式1,数值1
       [, 条件式2,数值2]
       [,条件式3, 数值3...]
       [, 数值4])
-----------
eg:
select deptno,ename,sal,decode(deptno,10,sal*1.1,
                                      20,sal*1.2,
                                      sal*1.5)new_sal 
from employees;
/*根据部门,,调整新的工资*/

注意

  • DECODE函数的最大组件数为255,包括expr,search,result,default。

猜你喜欢

转载自blog.csdn.net/qq1301709072/article/details/80599733