Oracle经典sql语句总结@sql-plus重点函数串讲与sql语句案例@中文排序详讲)(四)
orowid(char);把字符串转换成rowid类型
rowidtochar(x);把rowid类型转换成字符类型数据
10.通用函数
这些函数适用于任何数据类型,同时也适用于空值:
NVL (expr1, expr2) : 将expr1的空值替换为expr2
NVL2 (expr1, expr2, expr3) :
判断expr1是否为空,如果为空返回expr3,如果不为空返回expr2;相当于:expr1!=null exrp2:expr3;
NULLIF (expr1, expr2) :
expr1与expr2相等返回NULL,不等返回expr1
COALESCE (expr1, expr2, ..., exprn) :
COALESCE 与 NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值。 如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE 。
11.经典通用函数sql语句
//日期为空替换成给定的日期
SQL>select empno,ename,job,mgr,nvl(hiredate,to_date('2011-1-10','YYYY-MM-DD')),sal,nvl(comm,0),deptno from emp;
//计算出员工在该月的工资=(薪资+奖金);使用nvl函数
SQL> select empno,ename,job,mgr,hiredate,(nvl(sal,0)+nvl(comm,0)) as "工资",deptno from emp;
//计算员工的工资;使用nvl2函数
SQL> select empno,ename,job,mgr,hiredate,nvl2(comm,sal+comm,sal) as "工资",deptno from emp;
//注意观察理解;ename的长度跟job的长度是否相等
SQL> select ename as "expr1",job as "expr2",nullif(length(ename),length(job)) from emp;
//comm与sal交叉执行
SQL> select empno,ename,job,mgr,hiredate,coalesce(comm,sal,10000) as "salll", deptno from emp;
重点理解:单行函数可以嵌套。嵌套函数的执行顺序是由内到外。
12.条件表达式 :IF-THEN-ELSE 逻辑
Case函数的用法
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
Deecode函数的用法
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, default])
//为职位是Manager的员工 发放5000元的奖金
SQL> select ename,job,case job when 'MANAGER' then nvl(sal,0)+5000 end as "工资" from emp;
//员工的工资
SQL> select ename ,job,
2 case job when 'MANAGER' then nvl(sal,0)+5000+nvl(comm,0)
3 else nvl(sal,0)+nvl(comm,0)
4 end
5 from emp;
//改写成 decode的写法
SQL> select ename,job
2 ,decode(job,'MANAGER', nvl(sal,0)+5000+nvl(comm,0),
3 'CLERK',nvl(sal,0)+nvl(comm,0)+200,
4 nvl(sal,0)+nvl(comm,0)) as "工资"
5 from emp;
13、中文排序
order by nlssort(列,'NLS_SORT=SCHINESE_PINYIN_M');//拼音
order by nlssort(列,'NLS_SORT=SCHINESE_STROKE_M');//笔画
order by nlssort(列,'NLS_SORT=SCHINESE_RADICAL_M');//偏旁
举例如下:
SQL> select * from student; //查询所有数据
SID NAME DEPT AGE
----- -------------------- ---------- ---
1 张三 农大 21
2 李四 农大 22
3 王五 工大 21
4 赵六 工大 20
SQL> select * from student order by name; //注意观察
SID NAME DEPT AGE
----- -------------------- ---------- ---
1 张三 农大 21
2 李四 农大 22
3 王五 工大 21
4 赵六 工大 20
SQL> select * from student order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');//按名笔画排序
SID NAME DEPT AGE
----- -------------------- ---------- ---
2 李四 农大 22
3 王五 工大 21
1 张三 农大 21
4 赵六 工大 20
SQL> select * from student order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');//注意理解
SID N