第三章 单行函数 总结与测试

总结:

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;      
发布了8 篇原创文章 · 获赞 11 · 访问量 927

猜你喜欢

转载自blog.csdn.net/qq_41241814/article/details/103887035