第四章单行函数练习和课后作业

– 练习一

--  1.写一个查询,用首字母大写,其它字母小写显示雇员的 ename,显示名字的长度,
->  并给每列一个适当的标签,
->  条件是满足所有雇员名字的开始字母是J、A 或 M 的雇员,
->  并对查询结果按雇员的ename升序排序。(提示:使用initcap、length、substr)
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) 员工姓名长度
  from emp
 where (deptno in(10,20)) and (hiredate > '1-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) 四舍五入2, 
       round(100.456,1) 四舍五入1, 
       round(100.456) 四舍五入整数 from dual;

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

– 练习四

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

– 练习五

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

--  2.查询部门10,20的员工截止到2000年1月1日,工作了多少个月,入职的月份。
->  (提示:使用months_between,extract)
select months_between('1-1月-2000', hiredate) 工作多少个月, 
extract(month from hiredate)入职月份
  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') 开始工作日星期
  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') 日期格式, 
     round((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, '1-1月-2000') 相隔月数,
           round(((sysdate - to_date('1-1月-2000')) / 7)) 相隔周数
      from dual;

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

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

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

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

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

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

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

你可能感兴趣的:(Oracle数据库学习笔记,oracle,1.写一个查询,用首字母大写,其它字母小写显示雇员的,ena)