SQL题⽬4-oracle
⽂章⽬录
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;
3. 当前⽇期为2015年,指定⽇期格式为DD-MON-RR,指定⽇期为01-1⽉-95,该⽇期实际所代表的⽇期为?
select to_date('01-11⽉-95','dd-mon-rr')
from dual;
4. 当前⽇期为2015年,指定⽇期格式为DD-MON-YY,指定⽇期为01-11⽉-01,该⽇期实际所代表的⽇期为
select to_date('01-11⽉-01','dd-mon-yy')
from dual;
5. 返回当前⽇期
select sysdate
from dual;
6. 查询部门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;
oracle 时间转换7. 如果员⼯试⽤期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;
2. 显⽰ename、hiredate 和 雇员开始⼯作⽇是星期⼏,列标签DAY(提⽰:使⽤to_char函数)
select ename, hiredate, to_char( hiredate,'day')as"DAY"
from emp;
3. 查询员⼯姓名,⼯资,格式化的⼯资(¥999,999.99)(提⽰:使⽤to_char函数)
select ename, to_char( sal,'$999,999.99')
from emp;
4. 把字符串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;
2. 查询员⼯ENAME的第三个字母是A的员⼯的信息
select emp.*
from emp
where  substr(ename,3,1)='A';
3. 将员⼯⼯资按如下格式显⽰:123,23
4.00 RMB
select to_char(sal,'L999,999.99')||' RMB'
from emp;
4. 查询员⼯的姓名及其经理编号,要求对于没有经理的显⽰“No Manager”字符串
select ename, nvl( to_char(mgr),'No Manager')
from emp
5. 将员⼯的参加⼯作⽇期按如下格式显⽰:⽉份/年份。
select empno, to_char(hiredate,'mm/yyyy')
from emp;
6. 创建⼀个查询显⽰所有雇员的 ename和 sal。格式化sal为 15 个字符长度,⽤ $ 左填充,列标签 SAL
select ename, lpad(to_char(sal,'99999.99'),15,'$')
from emp;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。