文章目录

  • 1. 字符函数
  • 2. 数值函数
  • 3. 日期函数
  • 4. 转换函数
  • 5. 练习


1. 字符函数

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


2. 查询员工姓名中中包含大写或小写字母A的员工姓名。

select ename
    from emp
    where instr( lower(ename), 'a' ) > 0;


3. 查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中包含大写字母A的员工姓名,员工姓名长度(提示,要求使用INSTR函数数,不能使用like like进行判断

select ename, length(ename)
    from emp
    where deptno in (10, 20)
        and hiredate > '1-5月-81'
        and instr( ename, 'A' ) > 0;


4. 查询每个职工的编号,姓名,工资
– 要求将查询到的数据按照一定的格式合并成一个字符串.
– 前10位:编号,不足部分用*填充,左对齐
– 中间10位:姓名,不足部分用*填充,左对齐
– 后10位:工资,不足部分用**填充,右对齐

select rpad(empno, 10, '*') || rpad(ename, 10, '*') || lpad(sal, 10, '*')
    from emp;

2. 数值函数

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


2. .写一个查询,分别计算100.456 从小数点后第2位,第1位,整数位截断的值

select trunc(100.456, 2), trunc(100.456, 1), trunc(100.456, 0)
    from dual;

3. 日期函数

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


 2. 当前日期为2015年,指定日期格式为DD-MON-RR,指定日期为01-11月-01,该日期实际所代表的日期为

select to_date('01-11月-01', 'dd-mon-rr')
    from dual;

  1. 当前日期为2015年,指定日期格式为DD-MON-RR,指定日期为01-1月-95,该日期实际所代表的日期为?
select to_date('01-11月-95', 'dd-mon-rr')
    from dual;

  1. 当前日期为2015年,指定日期格式为DD-MON-YY,指定日期为01-11月-01,该日期实际所代表的日期为
select to_date('01-11月-01', 'dd-mon-yy')
    from dual;

  1. 返回当前日期
select sysdate 
    from dual;

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

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

4. 转换函数

  1. 显示系统当前时间,格式为2007-10-12 17:11:11(提示:使用to_char函数))
select to_char(sysdate, 'yyyy-mm-dd HH24:MI:SS')
    from dual;

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

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

  1. 把字符串2015-3月-18 13:13:13 转换成日期格式,并计算和系统当前时间间隔多少天。 (提示:使用to_date函数)
select to_date( '2015-3月-18 13:13:13', 'yyyy-month-dd HH24:MI:SS' ),
          sysdate - to_date( '2015-3月-18 13:13:13', 'yyyy-month-dd HH24:MI:SS' ) 
    from dual;

5. 练习

  1. 计算2000年1月1日到现在有多少月,多少周(四舍五入)
select round (months_between( sysdate, to_date('2000 1月 01', 'yyyy month dd') ) ),
           round( (sysdate - to_date('2000 1月 01', 'yyyy month dd')) / 7 )    
    from dual;

  1. 查询员工ENAME的第三个字母是A的员工的信息
select emp.*
    from emp
    where  substr(ename, 3, 1)  = 'A';

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

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

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

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