trunc:截断取整——不是 四舍五入
instr函数为字符查找函数,其功能是查找一个字符串在另一个字符串中首次出现的位置。
没有找到,instr函数返回0。
translate(m,n,s):把m中含有n的换成s
substr(ename,1,3) :字符截取函数
1. 显示满40年服务年限的员工的姓名和雇佣日期
months_between(m,n):用于计算m和n之间有几个月
select ename,hiredate from emp where (months_between(sysdate,hiredate)/12)>40;
mod(m,n):用于计算m和n的余数
求天数:
--计算相差几个月
select months_between(sysdate,hiredate) from emp;
--ADD_MONTHS(d,n):时间点d再加上n个月
--为了年份和月份相同
select ADD_MONTHS(hiredate,months_between(sysdate,hiredate)) from emp;
--直接相减得到天数
select SYSDATE - ADD_MONTHS(hiredate,months_between(sysdate,hiredate)) from emp;2. 以年月日的方式显示所有员工的服务年限
SELECT ename, hiredate,
计算相差几个月,除以12取年取整
trunc(MONTHS_BETWEEN(SYSDATE,hiredate) /12) year ,
先计算有多少个月,在计算余数剩几个月,在取整
trunc(MOD(MONTHS_BETWEEN(SYSDATE,hiredate) , 12 ) ) months ,
trunc(SYSDATE - ADD_MONTHS(hiredate,months_between(sysdate,hiredate))) day
FROM emp ;
3. 使用函数显示姓名字段的任何位置包含’A’的所有员工的姓名
select ename from emp where instr(ename,'A')<>0;
4. 对于每个员工,显示其加入公司的天数
select ename,trunc(sysdate-hiredate) from emp;
5. 找出在任意年份2月受聘的所有员工
select ename,to_char(hiredate,'MM') from emp where to_char(hiredate,'MM')=02;
6. 显示所有员工的姓名,用a代替A
select ename,translate(ename,'A','a') from emp;
7. 显示所有员工姓名的前三个字符
select substr(ename,1,3)from emp;
8. 以首字母大写的方式显示员工的姓名
select initcap(ename) from emp;
9. 显示不带有’R’的员工姓名
select ename from emp where instr(ename,'R')=0;
10. 找出各月倒数第3天受雇的所有员工
select ename,hiredate from emp where hiredate=last_day(hiredate)-2;
11. 统计每年雇佣的人数
select to_char(hiredate,'yyyy'),count(*) from emp group by to_char(hiredate,'yyyy');
select extract(year from hiredate) year,count(*) from emp group by extract(year from hiredate);