Oracle的SQL单行函数实练学习

Oracle 单行函数的实例练习,基于Oracle自带数据库,用户名分别为hr(主要)和scott。

基本上都做出来了,但还有一道关于人民币转数字的还没有做出来,有知道的留言下哦,

其他地方有错误的请指正。

 

/*1、将字符串 'abc' 以10位长度输出,不足10位用#补足(分别从左边和右边补足)
2、将字符串'    abc  ewr  3245   4     '去除两头空格输出
3、将字符串'abc 234 abc abc def abc' 中'abc'  替换为 '###' 输出
4、将数字7433453.52638263 四舍五入后输出
5、将数字743583.345234 中十位数之后数字全部忽略输出
*/

--1、将字符串 'abc' 以10位长度输出,不足10位用#补足(分别从左边和右边补足)
SELECT  lpad('abc',10,'#')  FROM dual;
SELECT  rpad('abc',10,'#')  FROM dual;
--2、将字符串'    abc  ewr  3245   4     '去除两头空格输出
SELECT trim('    abc  ewr  3245   4     ') FROM dual;
--3、将字符串'abc 234 abc abc def abc' 中'abc'  替换为 '###' 输出
SELECT replace('abc 234 abc abc def abc','abc','###') FROM dual;
--4、将数字7433453.52638263 四舍五入后输出
SELECT ROUND(7433453.52638263) FROM dual;
--5、将数字743583.345234 中十位数之后数字全部忽略输出
SELECT round(743583.345234,-1) from DUAL;

/*
6、查询hr方案中employees表,将所有员工工资上涨 11.173% 后,四舍五入到十位输出
7、将当前系统时间格式化为'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS'输出
8、查询hr方案中employees表,将入职时间格式化为'YYYY-MM-DD HH24:MI:SS' 显示
9、将当前时间加一年后格式化输出显示
10、两个时间相减后输出 
*/

--6、查询hr方案中employees表,将所有员工工资上涨 11.173% 后,四舍五入到十位输出
SELECT round(salary*(1+0.11173),-1)
FROM employees;

--7、将当前系统时间格式化为'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS'输出
SELECT to_char(sysdate,'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS')
FROM dual;
--8、查询hr方案中employees表,将入职时间格式化为'YYYY-MM-DD HH24:MI:SS' 显示
SELECT to_char(hire_date,'YYYY-MM-DD HH24:MI:SS') 
FROM employees;
--9、将当前时间加一年后格式化输出显示
SELECT to_char(add_months(sysdate,12),'YYYY-MM-DD')
from dual;

--10、两个时间相减后输出 
SELECT to_date(2011,'YYYY')-sysdate
FROM dual;

/*
11、查询hr下employees表中入职时间满10年的员工
12、查询hr下employees表中2000年后入职的员工
13、查询hr下employees表中所有98年3月入职的员工
14、查询hr下employees表中所有在3月入职的人
15、查询当前时间距离 '1998-8-2'  的月数
*/

--11、查询hr下employees表中入职时间满10年的员工
SELECT first_name
FROM employees
where months_between(sysdate,hire_date) > 10*12;

--12、查询hr下employees表中2000年后入职的员工
SELECT *  
FROM employees
where to_char(hire_date,'YYYY') >= '2000' ;

--13、查询hr下employees表中所有98年3月入职的员工
--这里要注意用的是to_char 来进行日期比较
SELECT *
FROM employees 
WHERE to_char(hire_date,'YYYY-MM') = '1998-03';

--14、查询hr下employees表中所有在3月入职的人
SELECT * 
FROM employees
WHERE to_char(hire_date,'MM') ='03';

--15、查询当前时间距离 '1998-8-2'  的月数
SELECT MONTHS_BETWEEN(sysdate,to_date('1998-8-2','YYYY-MM-DD'))
FROM dual;

/*
16、将当前时间减12个月然后输出
17、查询下一个星期一 显示输出
18、查询一个月的最后一天  显示输出
19、查询hr下employees表中入职时间在下半个月的员工
20、查询hr下employees表中上半年入职的员工
*/
--16、将当前时间减12个月然后输出
SELECT add_months(sysdate,-12)
FROM dual;

--17、查询下一个星期一 显示输出
SELECT next_day(sysdate,'星期一')
FROM dual;
--18、查询一个月的最后一天  显示输出
SELECT last_day(sysdate)
FROM dual;

--19、查询hr下employees表中入职时间在下半个月的员工
SELECT * 
FROM employees
WHERE to_char(hire_date,'DD') > '15' ; 

--20、查询hr下employees表中上半年入职的员工
SELECT * 
FROM employees
WHERE to_char(hire_date,'MM') <= '06';


/*
21、将数字825398374.3762 格式化成字符串后输出
22、字符串变数字 'RMB825,398,374.38' 
23、查询hr下employees表将员工薪水以 '$999,999,999.00' 格式显示
24、第一个参数是null返回第三个参数,否则返回第二个参数
	SELECT  nvl2(234, 42, 142)   FROM dual
25、两个参数相同返回null,否则返回第一个参数
	SELECT nullif('abc','abc') FROM dual
*/
--21、将数字825398374.3762 格式化成字符串后输出
SELECT to_char(825398374.3762)
from dual;

--22、字符串变数字 'RMB825,398,374.38' 
--????没有写出来

--23、查询hr下employees表将员工薪水以 '$999,999,999.00' 格式显示
SELECT to_char(salary,'$999,999,999.00')
FROM employees;

--24、第一个参数是null返回第三个参数,否则返回第二个参数
SELECT nvl2(commission_pct,commission_pct,0)
FROM employees;

--25、两个参数相同返回null,否则返回第一个参数
SELECT nullif('aaa','aaa')
FROM dual;

SELECT nullif('aaa','bbb')
FROM dual;

/*
26、查询hr下employees表中frist_name,last_name 长度相同的员工记录
27、查询hr下employees表中first_name,last_name 首字母相同的员工记录
29、employees表中如果员工职位是'IT_PROG'加薪 10 % ,如果员工职位是'ST_CLEAK '加薪 15 % ,如果是'SA_REP' 加薪 20 % .
30、查询hr下employees表中每月支出工资总额(多行函数不能和其他字段一起查询)
*/

--26、查询hr下employees表中frist_name,last_name 长度相同的员工记录
SELECT * 
FROM employees
WHERE length(first_name) = length(last_name);

--27、查询hr下employees表中first_name,last_name 首字母相同的员工记录
SELECT * 
FROM EMPLOYEES
WHERE substr(first_name,1,1) = substr(last_name,1,1);

--29、employees表中如果员工职位是'IT_PROG'加薪 10 % ,如果员工职位是'ST_CLEAK '加薪 15 % ,如果是'SA_REP' 加薪 20 % .
SELECT first_name, job_id,salary, case job_id when  'IT_PROG' then salary*(1+0.1)
            when 'ST_CLEAK' then salary*(1+0.15)
            when 'SA_REP' then salary*(1+0.2) else salary end bonus
FROM employees ;

--30、查询hr下employees表中每月支出工资总额(多行函数不能和其他字段一起查询)
SELECT sum(salary) 工资总额
FROM employees;

你可能感兴趣的:(oracle,sql)