Oracle作业第四章

--第四章单行函数练习和课后作业
select *
from emp
-- 练习一
--  1.写一个查询,用首字母大写,其它字母小写显示雇员的 ename,显示名字的长度,
--  并给每列一个适当的标签,
-- 条件是满足所有雇员名字的开始字母是J、A 或 M 的雇员,
-- 并对查询结果按雇员的ename升序排序。(提示:使用initcap、length、substr)
select  initcap(ename) 名字,length(ename) 名字的长度
from emp
where substr(ename,1,1) in('J','A','M')
order by ename asc

select  initcap(ename) 名字,length(ename) 名字的长度
from emp
where substr(ename,1,1)='J' or substr(ename,1,1)='A' or substr(ename,1,1)='M'
order by ename asc

--练习二
--  1.查询员工姓名中中包含大写或小写字母A的员工姓名。
select ename
from emp
where lower(ename) like '%a%' or upper(ename) like '%A%'

--  2.查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中包含大写字母A的员工姓名,员工姓名长度
--(提示,要求使用INSTR函数,不能使用like进行判断)
select ename,length(ename),deptno,hiredate
from emp
where deptno in(10,20)
and hiredate>'01-5月-81'
and instr(ename,'A')>0

-- 3.查询每个职工的编号,姓名,工资,要求将查询到的数据按照一定的格式合并成一个字符串.
-- 前10位:编号,不足部分用*填充,左对齐
-- 中间10位:姓名,不足部分用*填充,左对齐
-- 后10位:工资,不足部分用*填充,右对齐
select rpad(empno,10,'*'),rpad(ename,10,'*'),lpad(sal,10,'*')
from emp


--练习三
--  1.写一个查询,分别计算100.456 四舍五入到小数点后第2位、第1位、整数位的值。
select round(100.456,2)
from dual

select round(100.456,1)
from dual

select round(100.456,0)
from dual

--  2.写一个查询,分别计算100.456 从小数点后第2位、第1位、整数位截断的值。
select trunc(100.456,2)
from dual

select trunc(100.456,1)
from dual

select trunc(100.456,0)
from dual

-- 练习四
--  1.查询每个员工截止到现在一共入职多少天?
select ename,(sysdate-hiredate)
from emp


-- 练习五
--  1.查询服务器当前时间
select sysdate
from dual

--  2.查询部门10,20的员工截止到2000年1月1日,工作了多少个月,入职的月份。
-- (提示:使用months_between,extract)
select ename,months_between('01-1月-2000',hiredate) 工作了多少个月,extract(month from hiredate) month
from emp
where deptno in(10,20)


--  3.如果员工试用期6个月,查询职位不是MANAGER的员工姓名,入职日期,转正日期,
--  入职日期后的第一个星期一,入职当月的最后一天日期。
--(提示:使用add_months,next_day,last_day)
select ename 员工姓名,hiredate 入职日期,add_months(hiredate,6) 转正日期,next_day(hiredate,'星期一') 入职日期后的第一个星期一,last_day(hiredate) 入职当月的最后一天日期
from emp
where job<>'MANAGER'


--练习六

--  1.显示服务器系统当前时间,格式为2007-10-12 17:11:11(提示:使用to_char函数)
select
to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')
from dual


--  2.显示ename、hiredate 和 雇员开始工作日是星期几,列标签DAY(提示:使用to_char函数)
select ename,hiredate,to_char(hiredate,'day') DAY
from emp


--  3.查询员工姓名,工资,格式化的工资(¥999,999.99) (提示:使用to_char函数)
select ename,sal,to_char(sal,'L999,999.99') 格式化的工资
from emp


--  4.把字符串2015-03-18 13:13:13 转换成日期格式,并计算和系统当前时间间隔多少天。
-- (提示:使用to_date函数)
select to_date('2015-03-18 13:13:13','yyyy-mm-dd hh24:mi:ss') 转换成日期格式,
sysdate-to_date('2015-03-18 13:13:13','yyyy-mm-dd hh24:mi:ss') 和系统当前时间间隔多少天
from dual

-- 课后作业
--  1.计算2000年1月1日到现在有多少月,多少周(四舍五入)。
select months_between(sysdate,'01-1月-2000') 到现在有多少个月 (sysdate-'01-1月-2000')/7
from dual


--  2.查询员工ENAME的第三个字母是A的员工的信息(使用2个函数)。
select *
from emp
where substr(ename,3,1)='A'

--  3.使用trim函数将字符串‘hello’、‘  Hello ’、‘bllb’、‘ hello    ’
--  分别处理得到下列字符串ello、Hello、ll、hello。
 select
 trim(leading 'h'from 'hello')
 from dual
 
 select
 trim('  Hello ')
 from dual

select
trim('b'from 'bllb')
from dual

select
trim(' hello    ' )
from dual

--  4.将员工工资按如下格式显示:123,234.00 RMB 。
select to_char(sal,'999,999.99') || 'RMB'
from emp

--  5.查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串。
    select ename,nvl(to_char(mgr),'No Manager') 经理编号
    from emp

--  6.将员工的参加工作日期按如下格式显示:月份/年份。
    select to_char(hiredate,'mm/yyyy')
    from emp

--  7.在员工表中查询出员工的工资,并计算应交税款:如果工资小于1000,税率为0,
-- 如果工资大于等于1000并小于2000,税率为10%,如果工资大于等于2000并小于3000,
--  税率为15%,如果工资大于等于3000,税率为20%。
select ename,sal,
(case
when sal>0 and sal<1000 then sal*0
when sal>=1000 and sal<2000 then sal*0.1
when sal>=2000 and sal<3000 then sal*0.15
when sal>3000 then sal*0.2
else 0
end)
税款
from emp;

--  8.创建一个查询显示所有雇员的 ename和 sal。
-- 格式化sal为 15 个字符长度,用 $ 左填充,列标签 SALARY。
   select ename,lpad(sal,15,'$') SALARY
   from emp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fish_1112

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值