oracle_sql单行函数练习(含答案)
www.fsimple整理 2012-12-3
Oracle 单行函数的实例练习,基于Oracle自带数据库,用户名分别为hr(主要)和scott。
基本上都做出来了,但还有一道关于人民币转数字的还没有做出来,有知道的留言下哦,
其他地方有错误的请指正。
Sql代码
1./*1、将字符串 'abc' 以10位长度输出,不足10位用#补足(分别从左边和右边补足)
2.2、将字符串' abc ewr 3245 4 '去除两头空格输出
3.3、将字符串'abc 234 abc abc def abc' 中'abc' 替换为 '###' 输出
4.4、将数字7433453.52638263 四舍五入后输出
5.5、将数字743583.345234 中十位数之后数字全部忽略输出
6.*/
7.
8.--1、将字符串 'abc' 以10位长度输出,不足10位用#补足(分别从左边和右边补足)
9.SELECT lpad('abc',10,'#') FROM dual;
10.SELECT rpad('abc',10,'#') FROM dual;
11.--2、将字符串' abc ewr 3245 4 '去除两头空格输出
12.SELECT trim(' abc ewr 3245 4 ') FROM dual;
13.--3、将字符串'abc 234 abc abc def abc' 中'abc' 替换为 '###' 输出
14.SELECT replace('abc 234 abc abc def abc','abc','###') FROM dual;
15.--4、将数字7433453.52638263 四舍五入后输出
16.SELECT ROUND(7433453.52638263) FROM dual;
17.--5、将数字743583.345234 中十位数之后数字全部忽略输出
18.SELECT round(743583.345234,-1) from DUAL;
19.
20./*
21.6、查询hr方案中employees表,将所有员工工资上涨 11.173% 后,四舍五入到十位输出
22.7、将当前系统时间格式化为'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS'输出
23.8、查询hr方案中employees表,将入职时间格式化为'YYYY-MM-DD HH24:MI:SS' 显示
24.9、将当前时间加一年后格式化输出显示
25.10、两个时间相减后输出
26.*/
27.
28.--6、查询hr方案中employees表,将所有员工工资上涨 11.173% 后,四舍五入到十位输出
29.SELECT round(salary*(1+0.11173),-1)
30.FROM employees;
31.
32.--7、将当前系统时间格式化为'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS'输出
33.SELECT to_char(sysdate,'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS')
34.FROM dual;
35.--8、查询hr方案中employees表,将入职时间格式化为'YYYY-MM-DD HH24:MI:SS' 显示
36.SELECT to_char(hire_date,'YYYY-MM-DD HH24:MI:SS')
37.FROM employees;
38.--9、将当前时间加一年后格式化输出显示
39.SELECT to_char(add_months(sysdate,12),'YYYY-MM-DD')
40.from dual;
41.
42.--10、两个时间相减后输出
43.SELECT to_date(2011,'YYYY')-sysdate
44.FROM dual;
45.
46./*
47.11、查询hr下employees表中入职时间满10年的员工
48.12、查询hr下employees表中2000年后入职的员工
49.13、查询hr下employees表中所有98年3月入职的员工
50.14、查询hr下employees表中所有在3月入职的人
51.15、查询当前时间距离 '1998-8-2' 的月数
52.*/
53.
54.--11、查询hr下employees表中入职时间满10年的员工
55.SELECT first_name
56.FROM employees
57.where months_between(sysdate,hire_date) > 10*12;
58.
59.--12、查询hr下employees表中2000年后入职的员工
60.SELECT *
61.FROM employees
62.where to_char(hire_date,'YYYY') >= '2000' ;
63.
64.--13、查询hr下employees表中所有98年3月入职的员工
65.--这里要注意用的是to_char 来进行日期比较
66.SELECT *
67.FROM employees
68.WHERE to_char(hire_date,'YYYY-MM') = '1998-03';
69.
70.--14、查询hr下employees表中所有在3月入职的人
71.SELECT *
72.FROM employees
73.WHERE to_char(hire_date,'MM') ='03';
74.
75.--15、查询当前时间距离 '1998-8-2' 的月数
76.SELECT MONTHS_BETWEEN(sysdate,to_date('1998-8-2','YYYY-MM-DD'))
77.FROM dual;
78.
79./*
80.16、将当前时间减12个月然后输出
81.17、查询下一个星期一 显示输出
82.18、查询一个月的最后一天 显示输出
83.19、查询hr下employees表中入职时间在下半个月的员工
84.20、查询hr下employees表中上半年入职的员工
85.*/
86.--16、将当前时间减12个月然后输出
87.SELECT add_months(sysdate,-12)
88.FROM dual;
89.
oracle四舍五入90.--17、查询下一个星期一 显示输出
91.SELECT next_day(sysdate,'星期一')
92.FROM dual;
93.--18、查询一个月的最后一天 显示输出
94.SELECT last_day(sysdate)
95.FROM dual;
96.
97.--19、查询hr下employees表中入职时间在下半个月的员工
98.SELECT *
99.FROM employees
100.WHERE to_char(hire_date,'DD') > '15' ;
101.
102.--20、查询hr下employees表中上半年入职的员工
103.SELECT *
104.FROM employees
105.WHERE to_char(hire_date,'MM') <= '06';
106.
107.
108./*
109.21、将数字825398374.3762 格式化成字符串后输出
110.22、字符串变数字 'RMB825,398,374.38'
111.23、查询hr下employees表将员工薪水以 '$999,999,999.00' 格式显示
112.24、第一个参数是null返回第三个参数,否则返回第二个参数
113. SELECT nvl2(234, 42, 142) FROM dual
114.25、两个参数相同返回null,否则返回第一个参数
115. SELECT nullif('abc','abc') FROM dual
116.*/
117.--21、将数字825398374.3762 格式化成字符串后输出
118.SELECT to_char(825398374.3762)
119.from dual;
120.
121.--22、字符串变数字 'RMB825,398,374.38'
122.--没有写出来
123.
124.--23、查询hr下employees表将员工薪水以 '$999,999,999.00' 格式显示
125.SELECT to_char(salary,'$999,999,999.00')
126.FROM employees;
127.
128.--24、第一个参数是null返回第三个参数,否则返回第二个参数
129.SELECT nvl2(commission_pct,commission_pct,0)
130.FROM employees;
131.
132.--25、两个参数相同返回null,否则返回第一个参数
133.SELECT nullif('aaa','aaa')
134.FROM dual;
135.
136.SELECT nullif('aaa','bbb')
137.FROM dual;
138.
139./*
140.26、查询hr下employees表中frist_name,last_name 长度相同的员工记录
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论