总结:
1.打印出"2009年10月14日 9:25:40“格式的当前系统的日期和时间,
select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh:mi:ss')
from dual;
--2020年01月08日 08:40:27
2.格式化数字:1234567.89为1,234,567.89
select to_char(1234567.89,'000,000,000.00')
from dual;
-- 001,234,567.89
3.字符串转为数字时
--若字符串中没有特殊字符,可以进行隐式转换
select '1234567.89'+100
from dual;
--1234667.89
--若字符串中有特殊字符,例如'1,234,567.89',则无法进行隐式转换,需要使用to_number()来完成
select to_number('1,234,567.89', '999,999,999.99')+100
from dual;
--1234667.89
4.对于把日期作为查询条件的查询,一般都使用to_char()把一个字符串转为日期,这样可以不必关注日期格式
select last_name,hire_date
from employees
where hire_date=to_date('1998-5-23','yyyy-mm-dd');
--where to_char(hire_date,'yyyy-mm-dd')='1998-5-23';
5.转换函数:to_char(),to_number(),to_date()
6.查询每个月倒数第2天入职的员工的信息。
select last_name,hire_date
from employees
where hire_date=last_day(hire_date)-1;
7.计算公司员工的年薪
select last_name,salary*12*(1+nvl(commission_pct,0)) year_sql
from employees;
8.查询部门号为10,20,30的员工信息,若部门号为10,则打印其工资的1.1倍;20号部门则打印其工资的1.2倍;30号部门打印其工资的1.3倍。
--使用case-when-then-else
select employee_id,last_name,case department_id when 10 then salary*1.1
when 20 then salary*1.2
else salary*1.3 end new_sal
from employees
where department_id in (10,20,30);
--使用edcode函数
select employee_id,last_name,department_id,decode(department_id,10,salary*1.1,
20,salary*1.2
salary) new_sal
from employees
where department_id in (10,20,30);
测试:
1.显示系统时间(注:日期+时间)
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss')
from dual;
--2020-01-08 09:29:05
2.查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary)。
select employee_id,last_name,salary,salary*1.2 "new salary"
from employees;
3.将员工的姓名按首字母排序,并写出姓名的长度(length).
select last_name,length(last_name)
from employees
order by last_name asc;
4.查询各员工的姓名,并显示出各员工在公司工作的月份数(worked_month).
select last_name,hire_date,round(months_between(sysdate,hire_date),1) worked_month
from employees;
5.查询员工的姓名,以及在公司工作的月份数(worked_month),并按月份数降序排列。
select last_name,hire_date,round(months_between(sysdate,hire_date),1) worked_month
from employees
order by worked_month desc;
6.做一个查询,产生下面的结果:King earns $24000 monthly but wants $72000.别名为Dream Salary。
select last_name || 'earns' || to_char(salary,'$999999') || 'monthly,but wants' || to_char(3*salary,'$999999') "Dream Salary"
from employees;
7.使用decode函数,按照下面的条件。
job | grade |
---|---|
AD_PRES | A |
ST_MAN | B |
IT_PROG | C |
SA_REP | D |
ST_CLERK | E |
产生下面的结果:
Last_name | Job_id | Grade |
---|---|---|
king | AD_PRES | A |
select last_name "Last_name",job_id "Job_id",decode(job_id,'AD_PRES','A',
'ST_MAN','B',
'IT_PROGC','C'
'SA_REP','D',
'ST_CLERK','E') "Grade"
from employees;
8.将第7题的查询用case函数在写一遍。
select last_name "Last_name",job_id "Job_id",case job_id when'AD_PRES'then'A'
when 'ST_MAN'then'B'
when 'IT_PROGC'then'C'
when'SA_REP'then'D'
when'ST_CLERK'then'E' end "Grade"
from employees;