89652511 2017-03-02
oracle 常用的函数 以及 聚焦函数
1
2
3 --1,字符函数
4
5 --当没有表可以用个的时候oracle自带一个虚表dual
6
7 -- || 表示连接符号 将字符串连接到一起
8
9 式显示
10
11 Lower(char):将字符串转化为小写格式
12
13 ?将所有员工的名字按小写的方
14
15 select lower(ename),lower(job) from emp;
16
17
18
19 Upper(char):将字符转化为大写的格式
20
21 select upper('abcd') from dual;
22
23
24
25 Length(char):返回字符串的长度
26
27 ?显示正好为5个字符员工的姓名
28
29 select * from emp where length(ename)=5;
30
31
32
33 Substr(char,m,n):取字符串的子串,m:表示开始的位置; n:要截取的字符个数
34
35 ?显示所有员工姓名的前三个字符
36
37 select ename ,substr(ename,1,3) from emp;
38
39
40
41 Trim,Ltrim,Rtrim:去掉查询结果中的空格(全,左,右)
42
43 select '=='|| trim(' abc ') ||'==' from dual;
44
45 ?以首字母大写的方式显示所有员工
46
47 select ename,
48
49 substr(ename,0,1)||lower( substr(ename,2,length(ename)-1) )
50
51 from emp;
52
53
54
55
56
57 Replace (char1,search_string,replace_string): 查询替换
58
59 ? 显示所有的员工姓名将A替换成“我是A”
60
61 select ename, replace(ename,'A','我是A')as result from emp;
62
63
64
65
66
67 Instr(char1,char2,[,n[,m]]):取字符串的位置;n:开始位置,m:第m个char2的位置
68
69 ? 从第1个字符开始找到员工姓名中第二个A所在的位置
70
71 select ename, Instr(ename,'A',1,2) from emp;
72
73
74
75
76
77
78
79
80
81 --2,数学函数
82
83 Round(n,[m]):四舍五入。
84
85 如果省掉m,则四舍五入到整数;如果m是整数,则四舍五入到小数点后的m位后,如果是m负数,则 四舍五入到小数点m位前
86
87 ? 73.2564 四舍五入到小数点后2位
88
89 select round(73.2564,2) from dual;
90
91
92
93 trunc(n,[m]):用户截取数字。
94
95 如果省略m,就截去小数部分,如果m是整数就截取到小数点后m位后,如果m是负数,则截取到小数点的前m位
96
97 ? 73.2564 截取到小数点后3位
98
99 select trunc(73.2564,3) from dual;
100
101
102
103 Mod(n,[m]):取模
104
105 ? 8%3=?
106
107 select mod(8,3) from dual;
108
109
110
111 Floor(n):向下取整
112
113 ? 7.5846 向下取整
114
115
116
117 Ceil(n):向上取整
118
119 ?7.5846 向上取整
120
121 select floor(7.1289) ,Ceil(7.1289) from dual;
122
123
124
125 --2,其他函数
126
127 Abs(n) 返回数字n的绝对值
128
129 Acos(n) 返回n的反余弦值
130
131 Asin(n) 返回n的反正弦值
132
133 Atan(n) 返回n的反正切值
134
135 Cos(n) 返回n的余弦
136
137 Exp(n) 返回e的次幂
138
139 Log(m,n) 返回对数
140
141 Power(m,n) 返回m的n次幂
142
143
144
145
146
147
148
149 --3,日期函数
150
151 1 sysdate : 返回系统时间
152
153 select sysdate from dual;
154
155
156
157 2 current_date :返回当前时间
158
159 select current_date from dual;
160
161
162
163 3 Next_day(date,week) :给定时间的下一个星期是几号 /*week 数字和英文*/
164
165 select next_day(sysdate,'MONDAY') from dual;
166
167
168
169 4 add_months(d,n):返回在时间d上加n个月的时间
170
171 select add_months( sysdate,12 ) from dual;
172
173
174
175 5 last_day(d): 返回指定日期所在月份的最后一天
176
177 select last_day( sysdate) from dual;
178
179
180
181 练习:
182
183 ?查找已经入职362个月多的员工
184
185 ?显示满30年份服务年限的员工的姓名和受雇日期
186
187 ?每个员工加入公司的天数
188
189 ?下个星期一是多少号
190
191 ?找出各月倒数第三天受雇的所有员工
192
193
194
195
196
197 --4,转换函数
198
199 时间---->字符
200
201 字符---->数字
202
203 字符---->时间
204
205
206
207 --4.1、to_char( 时间,格式)
208
209 --时间格式:
210
211 yyyy :显示年份
212
213 yy :显示年份后2位
214
215 mm :月份
216
217 dd :号
218
219 hh /hh24 :小时
220
221 mi :分
222
223 ss :秒
224
225 Eg:select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual;
226
227
228
229
230
231 --货币格式:
232
233 9 :显示数字
234
235 0 :不足则补0
236
237 . :显示小数点
238
239 ,: 显示分隔符
240
241 $ : 显示美元符号
242
243 L : 显示本地货币
244
245 C : 显示国际货币符号
246
247 G : 制定位置显示分割符号
248
249 D : 制定位置显示小数点符号
250
251 ?薪水指定货币符号
252
253
254
255 Eg:
256
257 8756984.555
258
259 $8,756,984.555
260
261 $9,999,999.99
262
263 L9,999,999.99
264
265 select to_char(8756984.5,'L9,999,999.99') from dual;
266
267 select to_char(8756984.5,'$9G999G999D99') from dual;
268
269
270
271
272
273 --4.2、字符转日期 to_date('2010-10-10','yyyy-mm-dd')-----------------
274
275 Eg: select to_date('2017-2-27','yyyy-mm-dd') from dual;
276
277 (insert into emp values( 9900,
278
279 'ZHANGSAN','CLERK',7698,to_date('2010-10-10','yyyy-mm-dd'),2500.00,
280
281 0.00,30);)
282
283
284
285 --4.3、字符转数字 To_number(‘’)-------------------------------------
286
287 select to_number('001')*8 from dual;
288
289
290
291
292
293
294
295 --5,聚集函数 count,sum,avg,max,min --------------------------------
296
297 --5.1、count ---统计总行数
298
299 select count(*) from emp;
300
301 select count(empno) from emp; --统计员工总人数
302
303
304
305 --5.2、sum-----统计总和
306
307 select sum(sal) as total from emp; --统计所有人员的工资总和
308
309
310
311 --5.3、avg-----统计平均数
312
313 select avg(sal) from emp; --统计所有人员的工资平均值
314
315
316
317 --5.4、max--最大值---min最小值
318
319 select max(sal) as maxSal ,min(sal) as minSal from emp;
320
321
322
323
324
325 ------聚合函数不能放到where 作为条件
326
327 select * from emp where sal avg(sal); --错;
328
329 select * from emp where sal>(select avg(sal) from emp);---对
330
331
332
333 --6,显示当前用户-
334
335 select user from dual;
336
337
338
339 --7,decode 布尔判断函数 ------
340
341 --eg:查询出CLERK 的人员数量(如果job是clerk则输出1)
342
343 select sum( decode(job,'CLERK',1,0) ) from emp;
344
345
346
347 --eg:查询各个工种有多少人
348
349 select sum( decode(job,'CLERK',1,0) ) as CLERK,
350
351 sum( decode(job,'SALESMAN',1,0) ) as SALESMAN,
352
353 sum( decode(job,'MANAGER',1,0) ) as MANAGER,
354
355 sum( decode(job,'ANALYST',1,0) ) as ANALYST,
356
357 sum( decode(job,'PRESIDENT',1,0) ) as PRESIDENT,count(*) as total
358
359 from emp;
360
361
362
363 --8,nvl(column,default) 非空-----------------------------------
364
365 --eg:emp表中所有员工在元奖金的基础上增加50元奖金
366
367 update emp set comm=nvl(comm ,0 ) +50 ; --如果comm为空,就输出0,不为空就输出本身值
368
369