oracle 1

4.1 、字符函数
Upper
Uppe()将小写字母转换成大写
SELECT Upper ('abcde') FROM dual ;
SELECT * FROM emp WHERE ename=UPPER('smith') ;
Lower
Lower() 将大写字母转换成小写
SELECT lower('ABCDE') FROM dual ;
Initcap
Initcap ()将第一个字母改变成大写
Select initcap(ename) fromemp;
Concat
Concat () 返回结果为连接参数的字符串
Select concat(.a.,.b.)from dual;
Select .a. || .b. from dual;
Substr
Select substr(.abcde.,length(.abcde.)
2) from dual;
Select substr(.abcde.,
3,3) fromdual;
Length
Select length(ename) from emp;
Replace
Select replace(ename,.a.,.A.)from emp;
14

Oracle 教程
Instr
Select instr('Hello World','or') from dual; 8 indexof
Lpad
lpad('Smith',10,'*') 左侧填充lpad() *****Smith
Rpad
rpad('Smith',10,'*') 右侧填充rpad()Smith*****
Trim
trim(' Mr Smith ') 过滤首尾空格trim() Mr Smith
4.2 、数值函数
Round
select round(412,
2) from dual;
select round(412.313,2) from dual;
Mod
Trunc
select trunc(412.13,
2) from dual;
4.3 、日期函数
Months_between()
select months_between(sysdate,hiredate) from emp;
Add_months()
select add_months(sysdate,1) from dual;
15

Oracle 教程
Next_day()
select next_day(sysdate,'星期一') from dual;
Last_day
select last_day(sysdate) from dual;
4.4 、转换函数
To_char
select to_char(sysdate,'yyyy') from dual;
select to_char(sysdate,'fmyyyy
mm
dd') from dual;
select to_char(sal,'L999,999,999') from emp;
select to_char(sysdate,’D’) from dual;//返回星期
To_number
select to_number('13')+to_number('14') from dual;
To_date
Select to_date(.20090210.,.yyyyMMdd.) from dual;
4.5 、通用函数
NVL()函数
select nvl(comm,0) from emp;
NULLIF()函数
如果表达式exp1 与exp2 的值相等则返回null,否则
返回exp1 的值
NVL2()函数
select empno, ename, sal, comm, nvl2(comm, sal+comm, sal) totalfrom emp;
16

Oracle 教程
COALESCE()函数
依次考察各参数表达式,遇到非null 值即停止并返回该值。
select empno, ename, sal, comm, coalesce(sal+comm, sal, 0)总收入fromemp;
CASE 表达式
select empno, ename, sal,
case deptno
when 10 then '财务部'
when 20 then '研发部'
when 30 then '销售部'
else '未知部门'
end 部门
fromemp;
DECODE()函数
和case 表达式类似,decode()函数也用于实现多路分支结构
select empno, ename, sal,
decode(deptno, 10, '财务部',
20, '研发部',
30, '销售部',
'未知部门')
部门
fromemp;
decode 与case 哪个更好用呢?
单行函数嵌套
select empno, lpad(initcap(trim(ename)),10,' ') name, job,sal from emp;
4.6 、练习
找出每个月倒数第三天受雇的员工(如:2009
5
29)
select * from emp where last_day(hiredate)
2=hiredate;
17

Oracle 教程
找出25 年前雇的员工
select * from emp where hiredate<=add_months(sysdate,
25*12);
所有员工名字前加上Dear , 并且名字首字母大写
select 'Dear ' || initcap(ename) from emp;
找出姓名为5 个字母的员工
select * from emp where length(ename)=5;
找出姓名中不带R 这个字母的员工
select * from emp where ename not like '%R%';
显示所有员工的姓名的第一个字
select substr(ename,0,1) from emp;
显示所有员工,按名字降序排列,若相同,则按工资升序排序
假设一个月为30 天,找出所有员工的日薪,不计小数
找到2 月份受雇的员工
select * from emp where to_char(hiredate,'fmmm')='2';
列出员工加入公司的天数(四舍五入)
分别用case 和decode 函数列出员工所在的部门,deptno=10 显示'部门10',
deptno=20 显示'部门20'
deptno=30 显示'部门30'
deptno=40 显示'部门40'
否则为'其他部门'
Tags: 

延伸阅读

最新评论

发表评论