数据库-通用函数

1、NVL2(列名,结果1,结果2l)

NVL2(comm,sal+comm,sal):

判断comm是不是空值,如果是空值则返回sal,不是空值则返回sal+comm


2、sign(n)比较大小

取数字n的符号,大于0返回1,小于0返回-1,等于0则返回0


3、DECODE流程控制函数

DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )    

相当于if......else......语句,但DECODE()单独使用的话,一般用于等值判断

练习1:SELECT ename,job,DECODE(job,'MANAGER','经理','SALESMAN','销售人员','PRESIDENT','总裁') FROM emp;     //判断job这一列的值,如果是'MANAGER'则返回'经理',如果是'SALESMAN'则返回'销售人员',如果是'PRESIDENT',则返回'总裁'。

练习2:SELECT ename,job,sal,DECODE(job,'MANAGER',sal*0.8,'SALESMAN',sal+100,sal) 调后薪资 FROM emp;   //工资调整:manager的工资下调20%,salesman工资增加100,其余人员不变

练习3:进行范围判断,根据不同的工资范围,计算出不同等级的税款

方法1:与SIGN()函数结合使用

SELECT ename,job,sal,

DECODE(SIGN(sal-3000),1,sal*0.2,0,sal*0.2,

-1,DECODE(SIGN(sal-2000),1,sal*0.15,0,sal*0.15,

-1,DECODE(SIGN(sal-1000),1,sal*0.1,0,sal*0.1,-1,0)

)) 税款 FROM emp;

方法2:与TRUNC()函数结合使用

SELECT ename,job,sal,

DECODE(TRUNC(sal/1000),0,0,

1,sal*0.1,2,sal*0.15,sal*0.2) 税款 FROM emp;

练习4:SELECT ename,job,DECODE(INSTR(ename,'A'),0,'名字中不包含A','名字中包含A') 包含A不 FROM emp;   //与INSTR函数结合使用,判断名字中是否包含A

练习5:查询雇员姓名、岗位,并以岗位排序,顺序为'CLERK','MANAGER','SALESMAN','ANALYST','PRESIDENT'

方法1:DECODE

SELECT ename,job FROM emp ORDER BY DECODE(job,'CLERK',1,'MANAGER',2,'SALESMAN',3,'ANALYST',4,'PRESIDENT',5);

方法2:CASE..WHEN

SELECT ename,job FROM emp ORDER BY CASE job WHEN 'CLERK' THEN 1 WHEN 'MANAGER' THEN 2 WHEN 'SALESMAN' THEN 3 WHEN 'ANALYST' THEN 4 WHEN 'PRESIDENT' THEN 5 END;

你可能感兴趣的:(数据库-通用函数)