--1.以首字母大寫的方式顯示所有員工的姓名
select * from emp;
select initcap(ename) 首字母大些, emp.* from emp ;
--2. 將員工的職位用小寫顯示
select lower(job) 職位小寫, emp.* from emp ;
--3.將員工的名字分別用大寫和小寫顯示
select lower(ename) 名字小寫,upper(ename) 名字大寫 from emp ;
--4 將員工名字,首字母小寫,其他字母大寫的方式顯示
select * from emp;
select lower(substr(ename,1,1))||upper(substr(ename,2,20)) from emp;
--5 顯示員工姓名為5個字符的員工
select* from emp where length(ename)=5;
--6 顯示所有員工姓名的前三個字符
select substr(ename,1,3) from emp;
--7 顯示所有員工姓名的后三個字符
select substr(ename,-3,3) from emp;
--8. 以字符長度為10的方式顯示員工職位,多余的位數在右邊以*來填充
select rpad(ename,10,'*') from emp;
--9 找出字符串"oracle training"中第二個ra出現的位置
select instr('oracle training','ra',1,2) from dual;
--10 去除字符串‘ aadde gf ’兩邊的空格
select trim(' aadde gfa ') from dual;
--11 以指定格式顯示員工的工資(格式:SMITH 的工資是 800)
select ename||' 的工資是 '||sal from emp e;
--12 顯示所有員工的姓名,用a替換所有"A"
select replace (ename,'A','a') from emp;
--13 顯示員工姓名中包含‘H’的員工
select * from emp where ename like '%H%';
--14 顯示員工姓名中第二個字符是‘L’的員工
select * from emp where ename like '_L%';
--15 顯示員工姓名中最后一個字符是‘T’的員工
select * from emp
where substr(ename,-1,1)='T';
-- 16.顯示在一個月為30天的情況所有員工的日薪,忽略余數
select * from emp;
select floor(sal/30) from emp ;
--17.顯示員工的工資為800倍數的員工信息
select * from emp where mod(sal,800)=0;
--18.對345.543進行向上取整 向下取整 四舍五入 直接舍去
select ceil(345.543) as 向上取整,floor(345.543) as 向下取整,
round(345.543) as 四舍五入 ,
trunc(345.543) as 小數點后直接舍去
from dual;
--19. 查詢一個月前入職的員工(修改或添加員工表信息 出現上個月入職的員工記錄再進行查詢)
select * from emp;
insert into emp(empno, ename,hiredate, sal, job, deptno) ;
values(1001, 'LISI',to_date('2019/10/01','yyyy/mm/dd'),2500, 'clerk', 30);
select * from emp
where to_char( hiredate,'yyyy-mm-dd') >
to_char(add_months(sysdate,-1),'yyyy-mm-dd')
select to_char(add_months(sysdate,-1),'yyyy-mm-dd') from dual; --系統自減一個月時間
select to_char( hiredate,'yyyy-mm-dd') from emp; --員工入職時間
--20.顯示員工在此公司工作了幾個月(要求結果是整數)
--select to_date(sysdate,'yyyy-mm-dd') from dual;
--select to_date('2019-10-22','yyyy-mm-dd') from dual;
select round(
months_between(
to_date('2019-10-22','yyyy-mm-dd'),hiredate
)
) from emp;
--21. 顯示每月倒數地3天入職的所有員工
select * from emp
where hiredate in (last_day(hiredate)-2,last_day(hiredate)-1,last_day(hiredate))
--22. 顯示入職滿10年的員工的姓名和受雇日期。
select to_char(hiredate,'yyyy') from emp;
select to_char(sysdate,'yyyy') from dual;
select * from emp
where to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy')>10;
實踐練習
select * from emp ;
--1. 顯示所有12月份入職的員工
select to_char(hiredate,'mm') from emp ;
select * from emp
where to_char(hiredate,'mm')=12;
--2 .顯示所有員工的姓名、加入公司的年份和月份,並且按照年份排序
select ename as 姓名,to_char(hiredate,'yyyy/mm') as 入職年月 from emp
order by to_char(hiredate,'yyyy') ;
--3. 顯示所有1981年2月20日之前入職的員工
select to_date('1981/2/20','yyyy-mm-dd') from dual;
select * from emp
where hiredate <
to_date('1981/2/20','yyyy-mm-dd')
--4. 顯示員工的年薪(12個月的工資+補貼)comm為補貼
select ename, sal*12,comm,nvl(comm,0)+sal*12 from emp
--5. 根據員工工資 顯示繳稅金額
/* 工資0-1000 繳稅1%
工資1000-1500 繳稅5%
工資1500-3000 繳稅10%
工資3000以上 繳稅20*/
select * from emp
select e.ename, e.sal,case
when e.sal<=1000 then e.sal*0.01
when e.sal<=1500 then e.sal*0.05
when e.sal<=3000 then e.sal*0.1
else e.sal*0.2
end 稅金
from emp e