Oracle系统函数练习题50题,来看看你能做对多少吧(附答案)

使用的是oracle自带用户scott带的表emp,dept
1.将所有员工的名字按小写的方式显示
2.将所有员工的名字按大写的方式显示。
3.显示正好为5个字符的员工的姓名。
4.显示所有员工姓名的前三个字符。
5.以首字母大写,后面小写的方式显示所有员工的姓名。
6.以首字母小写后面大写方式显示所有员工姓名。
7.显示所有员工的姓名,用“我是老虎”替换所有“A”
8.查找已经入职8个月多的员工
9.显示满10年服务年限的员工的姓名和受雇日期。
10.对于每个员工,显示其加入公司的天数。
11.找出各月倒数第2天受雇的所有员工。
12.显示薪水的时候,把本地货币单位加在前面
13.显示1981年入职的所有员工
14.显示所有12月份入职的员工
15.查询公司中没有领导(MGR)的员工姓名及job
16.求ename列的长度,显示员工编号,名字,长度
17.将ename转成小写,显示员工编号,名字,小写名字X
18.将ename中的A,替换成ABC,显示编号,替换前的名字,替换后的名字
19.取ename的第二个字符,显示编号,名字,第二个字符
20.取ename的第二个字符到末尾的所有字符,显示编号,名字,截取后的字符
21.取ename的第三个到第五个字符,显示编号,名字,截取后的字符
22.找出ename中A第一次出现的位置,显示编号,名字,A的位置
23.计算emp表员工的年薪,月薪加奖金
24.查询员工的入职日期和转正日期
25.查询emp表员工距离现在入职了多少个月和多少天
26.查询emp中每年入职的人数
27.查询emp中每个月份的入职的人数
28.查询emp中每个季度的入职人数
29.查询emp中每一天入职人数 并按照日期排序如 1号 2人,2号 1人
30.显示员工的名字,名字长度, 如果名字长度为奇数则显示 奇数 如果名字长度为偶数则显示 偶数
31.显示员工的名字,工资, 如果工资大于1000小于2000, 显示一月一千多,如果工资大于2000小于3000显示一月二千多 …以此类推
32.显示员工的名字, 工资, 如果时salesman 工资涨200,如果是manager 工资扣200 后的结果
33 以首字母大写的方式显示所有员工的姓名
34 将员工的职位用小写显示
35 将员工的名字分别用大写和小写显示
36 将员工名字,首字母小写,其他字母大写的方式显示
37 显示员工姓名为 5 个字符的员工
38 显示所有员工姓名的前三个字符
39 显示所有员工姓名的后三个字符
40 找出字符串"oracle training"中第二个 ra 出现的位置
41 去除字符串‘ aadde gf ’两边的空格
42 以指定格式显示员工的工资(格式:SMITH 的工资是 800)
43 显示所有员工的姓名,用 a 替换所有"A"
44 显示员工姓名中包含‘H’的员工
45 显示员工姓名中第二个字符是‘L’的员工
46 显示员工姓名中最后一个字符是‘T’的员工
47 查询距离现在30年前入职的员工
48 显示在一个月为 30 天的情况所有员工的日薪,忽略余数
49 显示员工在此公司工作了几个月(要求结果是整数)
50 显示所有 12 月份入职的员工
51 显示每月倒数第 3 天入职的所有员工
52 显示距离现在入职满 20 年的员工的姓名和受雇日期。

--1.将所有员工的名字按小写的方式显示
SELECT LOWER(ENAME), ENAME FROM EMP;
--2.将所有员工的名字按大写的方式显示。
SELECT UPPER(ENAME), ENAME FROM EMP;
--3.显示正好为5个字符的员工的姓名。
SELECT ENAME FROM EMP WHERE LENGTH(ENAME) = 5;
--4.显示所有员工姓名的前三个字符。
SELECT ENAME, SUBSTR(ENAME, 0, 3) FROM EMP;
--5.以首字母大写,后面小写的方式显示所有员工的姓名。
SELECT ENAME, INITCAP(ENAME) FROM EMP;
--6.以首字母小写后面大写方式显示所有员工姓名。
SELECT ENAME,
       CONCAT(LOWER(SUBSTR(ENAME, 1, 1)),
              UPPER(SUBSTR(ENAME, 2, LENGTH(ENAME) - 1)))
  FROM EMP;
--7.显示所有员工的姓名,用“我是老虎”替换所有“A”
SELECT ENAME, REPLACE(ENAME, 'A', '我是狮子') FROM EMP;
--8.查找已经入职8个月多的员工
SELECT * FROM EMP WHERE MONTHS_BETWEEN(SYSDATE, HIREDATE) > 8;

--9.显示满10年服务年限的员工的姓名和受雇日期。
SELECT ENAME, HIREDATE
  FROM EMP
 WHERE MONTHS_BETWEEN(SYSDATE, HIREDATE) > 120;
--10.对于每个员工,显示其加入公司的天数。
SELECT SYSDATE - HIREDATE "天数" FROM EMP;
--11.找出各月倒数第2天受雇的所有员工。
SELECT * FROM EMP WHERE LAST_DAY(HIREDATE) - HIREDATE = 1;
---12.显示薪水的时候,把本地货币单位加在前面
SELECT SAL, TO_CHAR(SAL, 'L9999') FROM EMP;
--.显示1981年入职的所有员工
SELECT * FROM EMP WHERE HIREDATE - TO_DATE('1981/1/1', 'yyyy/mm/dd') < 0;
SELECT *
  FROM EMP
 WHERE HIREDATE BETWEEN TO_DATE('1981/1/1', 'yyyy/mm/dd') AND
       TO_DATE('1981/12/31', 'yyyy/mm/dd')
--1--4.显示所有12月份入职的员工
  SELECT * FROM EMP WHERE TO_CHAR(HIREDATE, 'mm') = 12;

--15.查询公司中没有领导(MGR)的员工姓名及job 
SELECT ENAME, JOB FROM EMP WHERE MGR IS NULL;
--16.求ename列的长度,显示员工编号,名字,长度
SELECT LENGTH(ENAME), EMPNO, ENAME FROM EMP;
--17.将ename转成小写,显示员工编号,名字,小写名字X
SELECT LOWER(ENAME), EMPNO, ENAME FROM EMP;
--18.将ename中的A,替换成ABC,显示编号,替换前的名字,替换后的名字
SELECT REPLACE(ENAME, 'A', 'ABC'), EMPNO, ENAME FROM EMP;
--19.取ename的第二个字符,显示编号,名字,第二个字符-
SELECT ENAME, SUBSTR(ENAME, 2, 1), EMPNO FROM EMP;
--20.取ename的第二个字符到末尾的所有字符,显示编号,名字,截取后的字符
SELECT ENAME, SUBSTR(ENAME, 2, LENGTH(ENAME) - 1), EMPNO FROM EMP;
--21.取ename的第三个到第五个字符,显示编号,名字,截取后的字符
SELECT ENAME, SUBSTR(ENAME, 3, 3), EMPNO FROM EMP;
--22.找出ename中A第一次出现的位置,显示编号,名字,A的位置 
SELECT INSTR(ENAME, 'A', 1, 1), EMPNO, ENAME FROM EMP;
--23.计算emp表员工的年薪,月薪加奖金
SELECT SAL * 12, SAL + NVL(COMM, 0) FROM EMP;
--24.查询员工的入职日期和转正日期
--???????????????????
--25.查询emp表员工距离现在入职了多少个月和多少天
SELECT SYSDATE - HIREDATE, MONTHS_BETWEEN(SYSDATE, HIREDATE) FROM EMP;
--26.查询emp中每年入职的人数
SELECT COUNT(1), TO_CHAR(HIREDATE, 'yyyy')
  FROM EMP
 GROUP BY (TO_CHAR(HIREDATE, 'yyyy'));
--27.查询emp中每个月份的入职的人数
SELECT COUNT(1), TO_CHAR(HIREDATE, 'mm') A
  FROM EMP
 GROUP BY (TO_CHAR(HIREDATE, 'mm'))
 ORDER BY A ASC;
--28.查询emp中每个季度的入职人数
SELECT COUNT(1), TO_CHAR(HIREDATE, 'q') A
  FROM EMP
 GROUP BY (TO_CHAR(HIREDATE, 'q'))
 ORDER BY A ASC;
--29.查询emp中每一天入职人数 并按照日期排序如  1号  2人,2号  1人
SELECT COUNT(1), TO_CHAR(HIREDATE, 'dd') A
  FROM EMP
 GROUP BY (TO_CHAR(HIREDATE, 'dd'))
 ORDER BY A ASC;
--30.显示员工的名字,名字长度, 如果名字长度为奇数则显示 奇数  如果名字长度为偶数则显示 偶数 
SELECT ENAME,
       LENGTH(ENAME),
       DECODE(MOD(LENGTH(ENAME), 2), 0, '偶数', 1, '奇数')
  FROM EMP;
--31.显示员工的名字,工资, 如果工资大于1000小于2000, 显示一月一千多,如果工资大于2000小于3000显示一月二千多 ..以此类推
SELECT ENAME,
       SAL,
       DECODE(FLOOR(SAL / 1000),
              1,
              '一月一千多',
              2,
              '一月两千多',
              3,
              '一月三千多',
              '土豪')
  FROM EMP;
--32.显示员工的名字, 工资, 如果时salesman 工资涨200,如果是manager 工资扣200 后的结果
SELECT ENAME,
       SAL,
       CASE
         WHEN JOB = 'SALESMAN' THEN
          SAL + 200
         WHEN JOB = 'MANAGER' THEN
          SAL - 200
         ELSE
          SAL
       END
  FROM EMP;
--[附加题]
--33 以首字母大写的方式显示所有员工的姓名 
SELECT INITCAP(ENAME), ENAME FROM EMP;
--34 将员工的职位用小写显示
SELECT JOB, LOWER(JOB) FROM EMP;
--35- 将员工的名字分别用大写和小写显示 
SELECT UPPER(ENAME), LOWER(ENAME) FROM EMP;
--36 将员工名字,首字母小写,其他字母大写的方式显示
SELECT ENAME,
       CONCAT(LOWER(SUBSTR(ENAME, 1, 1)),
              UPPER(SUBSTR(ENAME, 2, LENGTH(ENAME) - 1)))
  FROM EMP;
--37-- 显示员工姓名为 5 个字符的员工 
SELECT * FROM EMP WHERE LENGTH(ENAME) = 5;
--38 显示所有员工姓名的前三个字符 
SELECT ENAME, SUBSTR(ENAME, 1, 3) FROM EMP;
--39 显示所有员工姓名的后三个字符  
SELECT ENAME, SUBSTR(ENAME, -3, 3) FROM EMP;
--40 找出字符串"oracle training"中第二个 ra 出现的位置
SELECT INSTR('oracle training', 'ra', 1, 2) FROM DUAL;
--41 去除字符串‘ aadde gf ’两边的空格
SELECT TRIM(' aadde gf ') FROM DUAL;
--42 以指定格式显示员工的工资(格式:SMITH 的工资是 800) 
SELECT ENAME || '的工资是' || SAL FROM EMP;
--43 显示所有员工的姓名,用 a 替换所有"A" 
SELECT ENAME, REPLACE(ENAME, 'A', 'a') FROM EMP;
--44 显示员工姓名中包含‘H’的员工 
SELECT ENAME FROM EMP WHERE INSTR(ENAME, 'H') > 0;

--45 显示员工姓名中第二个字符是‘L’的员工 
SELECT * FROM EMP WHERE SUBSTR(ENAME, 2, 1) = 'L';
--46 显示员工姓名中最后一个字符是‘T’的员工 
SELECT * FROM EMP WHERE SUBSTR(ENAME, -1, 1) = 'T';
--47 查询距离现在30年前入职的员工 
SELECT *
  FROM EMP
 WHERE TO_CHAR(SYSDATE, 'yyyy') - TO_CHAR(HIREDATE, 'yyyy') = 30;
--48 显示在一个月为 30 天的情况所有员工的日薪,忽略余数
SELECT SAL, TRUNC(SAL / 30) FROM EMP;
--49 显示员工在此公司工作了几个月(要求结果是整数) 
SELECT MONTHS_BETWEEN(SYSDATE, HIREDATE) FROM EMP;
--50 显示所有 12 月份入职的员工 
SELECT * FROM EMP WHERE TO_CHAR(HIREDATE, 'mm') = 12;

--51 显示每月倒数第 3 天入职的所有员工 
SELECT * FROM EMP WHERE HIREDATE - LAST_DAY(HIREDATE) = -2;

--52 显示距离现在入职满 20 年的员工的姓名和受雇日期。
SELECT ENAME, HIREDATE
  FROM EMP
 WHERE TO_CHAR(SYSDATE, 'yyyy') - TO_CHAR(HIREDATE, 'yyyy') >= 20;

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值