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;