SQL函数练习题

1.将所有员工的名字按小写的方式显示
SELECT LOWER(ENAME) FROM EMP
2.将所有员工的名字按大写的方式显示。
SELECT UPPER(ENAME) FROM EMP
3.显示正好为5个字符的员工的姓名。
SELECT ENAME FROM EMP WHERE LENGTH(ENAME)=5
4.显示所有员工姓名的前三个字符。
SELECT SUBSTR(ENAME,1,3) FROM EMP 
5.以首字母大写,后面小写的方式显示所有员工的姓名。
SELECT INITCAP(ENAME) FROM EMP
6.以首字母小写后面大写方式显示所有员工姓名。
SELECT CONCAT(LOWER(SUBSTR(ENAME,1,1)),UPPER(SUBSTR(ename,2))) 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)/12>=10

10.对于每个员工,显示其加入公司的天数。
SELECT SYSDATE-HIREDATE 加入公司天数,EMP.* FROM EMP
11.找出各月倒数第2天受雇的所有员工。
SELECT * FROM emp WHERE hiredate=last_day(hiredate)-1
12.显示薪水的时候,把本地货币单位加在前面
SELECT emp.*,to_char(sal,'L99999999.999') from emp
13.显示1981年入职的所有员工
SELECT * FROM emp WHERE to_char(hiredate,'yyyy')='1981'
14.显示所有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 empno,ename,LENGTH(ename) FROM emp
17.将ename转成小写,显示员工编号,名字,小写名字X
SELECT empno,ename,LOWER(ename) FROM emp
18.将ename中的A,替换成ABC,显示编号,替换前的名字,替换后的名字
SELECT EMPNO,ENAME,REPLACE(ename,'A','ABC') FROM EMP
19.取ename的第二个字符,显示编号,名字,第二个字符
SELECT EMPNO,ENAME,SUBSTR(ENAME,2,1) FROM EMP
20.取ename的第二个字符到末尾的所有字符,显示编号,名字,截取后的字符
SELECT EMPNO,ENAME,SUBSTR(ENAME,2) FROM EMP
21.取ename的第三个到第五个字符,显示编号,名字,截取后的字符
SELECT EMPNO,ENAME,SUBSTR(ENAME,3,3) FROM EMP
22.找出ename中A第一次出现的位置,显示编号,名字,A的位置 
SELECT INSTR(ENAME,'A'),EMPNO,ENAME FROM EMP
23.计算emp表员工的年薪,月薪加奖金
SELECT EMP.*,SAL*12,SAL+NVL(COMM,0) FROM EMP
24.查询员工的入职日期和转正日期
SELECT EMP.*,HIREDATE,ADD_MONTHS(HIREDATE,3) 入职日期 FROM emp
25.查询emp表员工距离现在入职了多少个月和多少天
SELECT ename,hiredate,months_between(SYSDATE,hiredate) 入职月数,SYSDATE-HIREDATE 入职天数 FROM EMP
26.查询emp中每年入职的人数
SELECT TO_CHAR(HIREDATE,'YYYY'),COUNT(EMPNO) FROM EMP GROUP BY TO_CHAR(HIREDATE,'YYYY')
27.查询emp中每个月份的入职的人数
SELECT TO_CHAR(HIREDATE,'MM'),COUNT(EMPNO) FROM EMP GROUP BY TO_CHAR(HIREDATE,'MM')
28.查询emp中每个季度的入职人数
SELECT TO_CHAR(HIREDATE,'Q'),COUNT(EMPNO) FROM EMP GROUP BY TO_CHAR(HIREDATE,'Q') 
ORDER BY TO_CHAR(HIREDATE,'Q')
29.查询emp中每一天入职人数 并按照日期排序如  1号  2人,2号  1人
SELECT TO_CHAR(HIREDATE,'DD'),COUNT(EMPNO) FROM EMP GROUP BY TO_CHAR(HIREDATE,'DD')
ORDER BY TO_CHAR(HIREDATE,'DD')

30.显示员工的名字,名字长度, 如果名字长度为奇数则显示 奇数  如果名字长度为偶数则显示 偶数 
SELECT ENAME,LENGTH(ENAME),CASE 
WHEN MOD(LENGTH(ENAME),2)=1 THEN '奇数' ELSE '偶数' END FROM EMP
31.显示员工的名字,工资, 如果工资大于1000小于2000, 显示一月一千多,
如果工资大于2000小于3000显示一月二千多 ..以此类推
SELECT ENAME,SAL,
    CASE
        WHEN SAL > 1000 AND SAL <= 2000 THEN '一月一千多'
        WHEN SAL > 2000 AND SAL <= 3000 THEN '一月二千多'
        ELSE '其他'
    END 
FROM EMP

32.显示员工的名字, 工资, 如果是salesman 工资涨200,如果是manager 工资扣200 后的结果
SELECT ENAME,SAL,JOB,
       CASE WHEN JOB='SALSMAN' THEN SAL+200
            WHEN JOB='MANAGER' THEN SAL-200
            ELSE SAL
             END
             FROM EMP
[附加题]
1 以首字母大写的方式显示所有员工的姓名 
SELECT UPPER(ename) FROM emp
2 将员工的职位用小写显示
SELECT LOWER(job) FROM emp
3 将员工的名字分别用大写和小写显示 
SELECT CONCAT(UPPER(ename),LOWER(ename)) FROM emp
4 将员工名字,首字母小写,其他字母大写的方式显示
SELECT CONCAT(LOWER(SUBSTR(ENAME,1,1)),UPPER(SUBSTR(ENAME,2))) FROM EMP
5 显示员工姓名为 5 个字符的员工 
SELECT ENAME,LENGTH(ENAME) FROM EMP WHERE LENGTH(ENAME)=5
6 显示所有员工姓名的前三个字符 
SELECT SUBSTR(ENAME,1,3) FROM EMP
7 显示所有员工姓名的后三个字符  
SELECT SUBSTR(ENAME,-3) FROM EMP
9 找出字符串"oracle training"中第二个 ra 出现的位置
SELECT INSTR('oracle training','ra',1,2) FROM dual
10 去除字符串‘ aadde gf ’两边的空格
SELECT TRIM(' aadde gf ') FROM dual
11 以指定格式显示员工的工资(格式:SMITH 的工资是 800) 
SELECT CONCAT('史密斯的工资是','sal') FROM emp
12 显示所有员工的姓名,用 a 替换所有"A" 
SELECT ename,REPLACE(ename,'A','a') FROM emp
13 显示员工姓名中包含‘H’的员工 
SELECT ename FROM emp WHERE INSTR(ename,'H')>0
14 显示员工姓名中第二个字符是‘L’的员工 
SELECT ename FROM emp WHERE SUBSTR(ename,2,1)='L'
15 显示员工姓名中最后一个字符是‘T’的员工 
SELECT ENAME FROM EMP WHERE SUBSTR(ENAME,-1,1)='T'
16 查询距离现在30年前入职的员工 
SELECT ENAME,HIREDATE FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)/12>=30
17 显示在一个月为 30 天的情况所有员工的日薪,忽略余数
SELECT ENAME,FLOOR(SAL/30) FROM EMP
18 显示员工在此公司工作了几个月(要求结果是整数) 
SELECT ENAME,TO_CHAR(MONTHS_BETWEEN(SYSDATE,HIREDATE),'9999') FROM EMP
19 显示所有 12 月份入职的员工 
SELECT ENAME,HIREDATE FROM EMP WHERE TO_CHAR(HIREDATE,'MM')='12'
22 显示每月倒数第 3 天入职的所有员工 
SELECT *
FROM emp
WHERE TO_CHAR(hiredate, 'DD') = TO_CHAR(LAST_DAY(hiredate), 'DD') - 2;


23 显示距离现在入职满 20 年的员工的姓名和受雇日期。
SELECT ENAME,HIREDATE FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)/12>=20
SELECT ENAME,HIREDATE FROM EMP WHERE ADD_MONTHS(HIREDATE,12*20)<=SYSDATE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值