Oracle学习(三):单行函数(三)
¥1,300.00
已选择14行。
SQL> host cls
SQL> --通用函数
SQL> --nvl2(a,b,c) 当a=null时,返回c,否则返回b
SQL> select sal*12+nvl2(comm,comm,0) from emp;
SAL*12+NVL2(COMM,COMM,0)
------------------------
9600
19500
15500
35700
16400
34200
29400
36000
60000
18000
13200
SAL*12+NVL2(COMM,COMM,0)
------------------------
11400
36000
15600
已选择14行。
SQL> host cls
SQL> --nullif(a,b) 当a=b时,返回null,否则返回a
SQL> select nullif('abc','abc') from dual;
NUL
---
SQL> select nullif('abc','abdc') from dual;
NUL
---
abc
SQL> host cls
SQL> -- ¥1,600.00
SQL> ¥1,250.00
SP2-0042: 未知命令 "¥1,250.00" - 其余行忽略。
SQL> ¥2,975.00
SP2-0042: 未知命令 "¥2,975.00" - 其余行忽略。
SQL> ¥1,250.00
SP2-0042: 未知命令 "¥1,250.00" - 其余行忽略。
SQL> ¥2,850.00
SP2-0042: 未知命令 "¥2,850.00" - 其余行忽略。
SP2-0044: 要获取已知命令的列表, 请输入 HELP;
输入 EXIT 可退出。
SQL> ¥2,450.00
SP2-0042: 未知命令 "¥2,450.00" - 其余行忽略。
SQL> ¥3,000.00
SP2-0042: 未知命令 "¥3,000.00" - 其余行忽略。
SQL> ¥5,000.00
SP2-0042: 未知命令 "¥5,000.00" - 其余行忽略。
SQL> ¥1,500.00
SP2-0042: 未知命令 "¥1,500.00" - 其余行忽略。
SP2-0044: 要获取已知命令的列表, 请输入 HELP;
输入 EXIT 可退出。
SQL> host cls
SQL> --COALESCE 从左至右找到第一个不为null的值
SQL> select comm,sal,COALESCE(comm,sal) from emp;
COMM SAL COALESCE(COMM,SAL)
---------- ---------- ------------------
800 800
300 1600 300
500 1250 500
2975 2975
1400 1250 1400
2850 2850
2450 2450
3000 3000
5000 5000
0 1500 0
1100 1100
COMM SAL COALESCE(COMM,SAL)
---------- ---------- ------------------
950 950
3000 3000
1300 1300
已选择14行。
SQL> host cls
SQL> --根据职位涨工资 总裁1000 经理800 其他400
SQL> select ename,job,sal
2 from emp;
ENAME JOB SAL
---------- --------- ----------
SMITH CLERK 800
ALLEN SALESMAN 1600
WARD SALESMAN 1250
JONES MANAGER 2975
MARTIN SALESMAN 1250
BLAKE MANAGER 2850
CLARK MANAGER 2450
SCOTT ANALYST 3000
KING PRESIDENT 5000
TURNER SALESMAN 1500
ADAMS CLERK 1100
ENAME JOB SAL
---------- --------- ----------
JAMES CLERK 950
FORD ANALYST 3000
MILLER CLERK 1300
已选择14行。
SQL>
select ename,job,sal 涨前薪水, case job when 'PRESIDENT' then sal+1000
2 when 'MANAGER' then sal+800
3 else sal+400
4 end 涨后薪水
5 from emp;
ENAME JOB 涨前薪水 涨后薪水
---------- --------- ---------- ----------
SMITH CLERK 800 1200
ALLEN SALESMAN 1600 2000
WARD SALESMAN 1250 1650
JONES MANAGER 2975 3775
MARTIN SALESMAN 1250 1650
BLAKE MANAGER 2850 3650
CLARK MANAGER 2450 3250
SCOTT ANALYST 3000 3400
KING PRESIDENT 5000 6000
TURNER SALESMAN 1500 1900
ADAMS CLERK 1100 1500
ENAME JOB 涨前薪水 涨后薪水
---------- --------- ---------- ----------
JAMES CLERK 950 1350
FORD ANALYST 3000 3400
MILLER CLERK 1300 1700
已选择14行。
SQL> select ename,job,sal 涨前薪水,decode(job,'PRESIDENT',sal+1000,
2 'MANAGER', sal+800,
3 sal+400)涨后薪水
4 from emp;
ENAME JOB 涨前薪水 涨后薪水
---------- --------- ---------- ----------
SMITH CLERK 800 1200
ALLEN SALESMAN 1600 2000
WARD SALESMAN 1250 1650
JONES MANAGER 2975 3775
MARTIN SALESMAN 1250 1650
BLAKE MANAGER 2850 3650
CLARK MANAGER 2450 3250
SCOTT ANALYST 3000 3400
KING PRESIDENT 5000 6000
TURNER SALESMAN 1500 1900
ADAMS CLERK 1100 1500
ENAME JOB 涨前薪水 涨后薪水
---------- --------- ---------- ----------
JAMES CLERK 950 1350
FORD ANALYST 3000 3400
MILLER CLERK 1300 1700
已选择14行。
SQL> spool off