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;