2024年6月12日发(作者:)
oracle_sql单行函数练习(含答案)
整理 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;
rpad('abc',10,'#') FROM dual;
11.--2、将字符串' abc ewr 3245 4 '去除两
头空格输出
trim(' abc ewr 3245 4 ') FR
OM dual;
13.--3、将字符串'abc 234 abc abc def abc' 中'abc' 替换
为 '###' 输出
replace('abc 234 abc abc def abc','abc','###') FR
OM dual;
15.--4、将数字7433453.52638263 四舍五入后输出
ROUND(7433453.52638263) FROM dual;
17.--5、将数字743583.345234 中十位数之后数字全部忽略输出
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% 后,
四舍五入到十位输出
round(salary*(1+0.11173),-1)
employees;
31.
32.--7、将当前系统时间格式化为
'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS'输出
to_char(sysdate,'YEAR MONTH DY DAY YYYY-MM-DD HH24
:MI:SS')
dual;
35.--8、查询hr方案中employees表,将入职时间格式化为
'YYYY-MM-DD HH24:MI:SS' 显示
to_char(hire_date,'YYYY-MM-DD HH24:MI:SS')
employees;
38.--9、将当前时间加一年后格式化输出显示
to_char(add_months(sysdate,12),'YYYY-MM-DD')
dual;
41.
42.--10、两个时间相减后输出
to_date(2011,'YYYY')-sysdate
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年的员工
first_name
employees
months_between(sysdate,hire_date) > 10*12;
58.
59.--12、查询hr下employees表中2000年后入职的员工
*
employees
to_char(hire_date,'YYYY') >= '2000' ;
63.
64.--13、查询hr下employees表中所有98年3月入职的员工
65.--这里要注意用的是to_char 来进行日期比较
*
employees
to_char(hire_date,'YYYY-MM') = '1998-03';
69.
70.--14、查询hr下employees表中所有在3月入职的人
*
employees
to_char(hire_date,'MM') ='03';
74.
75.--15、查询当前时间距离 '1998-8-2' 的月数
MONTHS_BETWEEN(sysdate,to_date('1998-8-2','YYYY-MM-DD')
)
dual;
78.
79./*
80.16、将当前时间减12个月然后输出
81.17、查询下一个星期一 显示输出
82.18、查询一个月的最后一天 显示输出
83.19、查询hr下employees表中入职时间在下半个月的员工
84.20、查询hr下employees表中上半年入职的员工
85.*/
86.--16、将当前时间减12个月然后输出
add_months(sysdate,-12)
dual;
89.
90.--17、查询下一个星期一 显示输出
next_day(sysdate,'星期一')
dual;
93.--18、查询一个月的最后一天 显示输出
last_day(sysdate)
dual;
96.
97.--19、查询hr下employees表中入职时间在下半个月的员工
*
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 长度相同
的员工记录
141. 27、查询hr下employees表中first_name,last_name 首字母相
同的员工记录
142. 29、employees表中如果员工职位是'IT_PROG'加薪 10 % ,如果
员工职位是'ST_CLEAK '加薪 15 % ,如果是'SA_REP' 加
薪 20 % .
143. 30、查询hr下employees表中每月支出工资总额(多行函数不能和
其他字段一起查询)
144. */
145.
146. --26、查询hr下employees表中frist_name,last_name 长度相
同的员工记录
147. SELECT *
148. FROM employees
149. WHERE length(first_name) = length(last_name);
150.
151. --27、查询hr下employees表中first_name,last_name 首字母
相同的员工记录
152. SELECT *
153. FROM EMPLOYEES
154. WHERE substr(first_name,1,1) = substr(last_name,1,1);
155.
156. --29、employees表中如果员工职位是'IT_PROG'加薪 10 % ,如
果员工职位是'ST_CLEAK '加薪 15 % ,如果是'SA_REP' 加
薪 20 % .
157. SELECT first_name, job_id,salary, case job_id when
'IT_PROG' then salary*(1+0.1)
158. when 'ST_CLEAK' then salary*(1+
0.15)
159. when 'SA_REP' then salary*(1+0.
2) else salary end bonus
160. FROM employees ;
161.
162. --30、查询hr下employees表中每月支出工资总额(多行函数不能
和其他字段一起查询)
163. SELECT sum(salary) 工资总额
164. FROM employees;
发布评论