--函数 founations()
SQL> select ename,empjob,sal 涨前薪水, decode(empjob,'PRESIDENT',sal+1000,
2 'MANAGER',sal+800,
3 sal+400) 涨后薪水
4 from emp;
select ename,empjob,sal 涨前薪水, case empjob when 'PRESIDENT' then sal+1000
2 when 'MANAGER' then sal+800
3 else sal+400
4 end 涨后薪水
5* from emp
SQL> --COALESCE 从左至右 依次检查输入的参数,返回第一个不是NULL的参数,只有当传入COALESCE函数的所有的参数都是NULL的时候,函数才会返回NULL。
SQL> select comm,sal,COALESCE(comm,sal) from emp;
COMM SAL COALESCE(COMM,SAL)
---------- ---------- ------------------
800 800
300 1600 300
NULL指的是空值,或者非法值。
NVL (expr1, expr2)->expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致
NVL2 (expr1, expr2, expr3) ->expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型
NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1
*/
SQL> --nvl2(a,b,c) :当a=null时,返回c,否则返回b 虑空 函数
SQL> select sal*12+nvl2(comm,comm,0)
2 from emp;
SAL*12+NVL2(COMM,COMM,0)
------------------------
9600
SQL> --nullif(a,b) 当a=b时,返回null,否则返回a
SQL> select nullif('abcd','abcd') --' ' 代表字符串 " " 代表列
2 from dual;
NULL
----
SQL> --nvl2(a,b,c) :当a=null时,返回c,否则返回b
SQL> select sal*12+nvl2(comm,comm,0)
2 from emp;
SAL*12+NVL2(COMM,COMM,0)
------------------------
9600
组函数会自动滤空 高
select count(*),count(nvl(comm,0)) from emp
SQL> /
COUNT(*) COUNT(NVL(COMM,0))
---------- ------------------
14 14
SQL> --instr: 在母串中,查找子串,如果找到返回下标,否则返回0
SQL> select instr('Hello World','ll') from dual;
INSTR('HELLOWORLD','LL')
------------------------
3
ROUND(数字,保留的小数点数)
select ROUND(45.926, 2) 一,ROUND(45.926, 1) 二, ROUND(45.926, 0) 三,
ROUND(45.926, -1) 四, ROUND(45.926, -2) 五,ROUND(45.926, -3)
from dual;
一 二 三 四 五 六
---------- ---------- ---------- ---------- ---------- ----------
45.93 45.9 46 50 0 0
用to_char函数,可以把一个日期转为一个字符串,并且能制定格式 和dataformat有异曲同工之妙
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2013-01-22 14:33:54
使用当前用户该 global表示全局的 session表示当前会话 这样才不会因为格式错误,而查不到
SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
会话已更改。
select * from emp where hiredate='1981-11-17';
SQL> select
(sysdate-1) 昨天,sysdate 今天,(sysdate+1) 明天
2 from dual;
昨天 今天 明天
-------------- -------------- --------------
21-1月 -13 22-1月 -13 23-1月 -13
SQL> --员工的工龄 得到的是个近似值
SQL> select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,
2 (sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年
3 from emp;