文章目录
- 1. 字符函数
- 2. 数值函数
- 3. 日期函数
- 4. 转换函数
- 5. 练习
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. 数值函数
- 写一个查询,分别计算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. 日期函数
- 查询每个员工截止到现在一共入职多少天?
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;
- 当前日期为2015年,指定日期格式为DD-MON-RR,指定日期为01-1月-95,该日期实际所代表的日期为?
select to_date('01-11月-95', 'dd-mon-rr')
from dual;
- 当前日期为2015年,指定日期格式为DD-MON-YY,指定日期为01-11月-01,该日期实际所代表的日期为
select to_date('01-11月-01', 'dd-mon-yy')
from dual;
- 返回当前日期
select sysdate
from dual;
- 查询部门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;
- 如果员工试用期6个月,查询职位不是MANAGER的员工姓名,入职日期,转正日期,入职日期后的第一个星期一,入职当月的最后一天日期。((提示:使用add_months,next_day,last_day
select ename, hiredate,
add_months(hiredate, 6),
next_day(hiredate, '星期一'),
last_day(hiredate)
from emp;
4. 转换函数
- 显示系统当前时间,格式为2007-10-12 17:11:11(提示:使用to_char函数))
select to_char(sysdate, 'yyyy-mm-dd HH24:MI:SS')
from dual;
- 显示ename、hiredate 和 雇员开始工作日是星期几,列标签DAY(提示:使用to_char函数)
select ename, hiredate, to_char( hiredate, 'day' ) as "DAY"
from emp;
- 查询员工姓名,工资,格式化的工资(¥999,999.99)(提示:使用to_char函数)
select ename, to_char( sal, '$999,999.99' )
from emp;
- 把字符串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. 练习
- 计算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;
- 查询员工ENAME的第三个字母是A的员工的信息
select emp.*
from emp
where substr(ename, 3, 1) = 'A';
- 将员工工资按如下格式显示:123,234.00 RMB
select to_char(sal, 'L999,999.99') || ' RMB'
from emp;
- 查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串
select ename, nvl( to_char(mgr), 'No Manager' )
from emp
- 将员工的参加工作日期按如下格式显示:月份/年份。
select empno, to_char(hiredate, 'mm/yyyy')
from emp;
- 创建一个查询显示所有雇员的 ename和 sal。格式化sal为 15 个字符长度,用 $ 左填充,列标签 SAL
select ename, lpad(to_char(sal, '99999.99'), 15, '$')
from emp;