oracle 函数、聚焦函数

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

相关推荐

jiong / 0评论 2020-09-17