Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88308
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 846
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-22 13:11
文章分类

全部博文(51)

文章存档

2013年(51)

我的朋友

分类: Oracle

2013-08-07 10:12:49



Oracle的函数



              Oracle函数可以分为单值函数和分组函数两大类,单值函数又分为字符函数、日期和时间函数、数字函数、转换函数和混合函数:分组函数右countmaxminavgsum,都可以和group by 搭配使用。       



         单值函数

1、 字符函数

l  字符串连接函数

         问题:把员工的姓名和工作类型连在一起使用"-"分隔

         函数:concat(字符串1,字符串2)



 


 

select concat(concat(ename,'-'),job) from
  emp;


 

             
扩展点:字符串连接符号" || "



 


 

select ename || '-' || job from emp;


 

         



l  右对齐函数

         问题:将员工的姓名右对齐显示

         函数:lpad(待处理的字符串,预留位置,填充符号)  





 


 

select lpad(ename,10,' ') from emp;


 


        



l  字符串截取函数

         问题:截取员工姓名的前3个字符和字符4以后的内容显示

         函数:substr(字符串,起始位置,截取的个数)

               substr(字符串,起始位置)  --默认截取到最后



 


 

select ename,
  substr(ename,1,3),substr(ename,4) from emp;


 


        



l  字符查找函数

         问题:字母'T'在员工姓名中第一次出现和第二次出现的位置

         函数:instr(字符串,查找的字符,查找的起始位置,出现的次数)



 


 

select ename, instr(ename,'T',1,1) as A,
  instr(ename,'T',1,2) as B from emp;


 


         扩展:员工姓名中不含M的员工



 


 

select ename from emp where
  instr(ename,'M',1,1)=0


 


         



l  首字母大写函数

         问题:员工姓名首字母大写显示

         函数:initcap(字符串)



 


 

select initcap(ename) from emp;


 


        



l  /大写函数

         问题:将员工姓名大写转换

         函数:upper(字符串)/lower(字符串)



 


 

select upper(ename) , lower(ename) from
  emp;


 


    



l  字符串替换函数

         问题:将姓名中的M全部替换成'*'显示

         函数:replace(字符串,带替换的字符,替换后的字符)



 


 

select replace(ename,'M','*') from emp;


 


      



l  字符串长度函数

         问题:找出姓名长度大于5的员工姓名

         函数:length(字符串)



 


 

select ename from emp where
  length(ename)>5;


 


2、 日期函数

l  系统时间            
     
问题:返回系统的当前时间           
      
函数:sysdate            
     
说明:1、函数没有“( )

         2dual 是一张无意义的表,在Oracle专门用于函数的测试





 


 

select sysdate from dual;


 


    



                  使用一个to_char,转换函数类型

            
     
将时间类型转成字符类型            
     
函数:to_char(时间数据,格式)



 


 

select to_char(sysdate,'yyyy-mm-dd
  hh:mi:ss') from dual;


 


                                                
     
格式:yyyy

mm

dd 日期

d 一周中的第几天

ddd 一年中的第几天

day

month 月份

hh24 24小时制



l  日期修改函数            
     
问题:将系统时间添加2个月显示            
     
函数:add_months(时间数据,添加的月份)



 


 

select add_months(sysdate,2) from dual;


 

l  日期差函数

            
     
问题:显示员工入职时间的月份统计           
     
函数:months_between(时间1,时间2)



 


 

select
  ename,hiredate,months_between(sysdate,hiredate) from emp;


 


        
  



3、 转换函数

l  to_char()见上例

  l  时间转换函数

     函数:to_date(时间数据字符串,格式)





 


 

insert into 表名 values(to_date('2009-12-12','yyyy-mm-dd'));


 


*  案例1:查询在12年前参加工作的员工



 


 

Select
  ename,hiredate from emp where months_between(sysdate,hiredate)>144


 


*  案例2:查询在当月倒数第三天参加工作的员工



        函数:last_day(时间数据)  -> 返回该日期所在月份的最后一天



 


 

select ename,hiredate from emp where
  last_day(hiredate)-2 = hiredate;


 


*  案例3:查询每个员工的工作天数



格式:时间1-时间2  -->  返回相差的天数



 


 

select ename,hiredate,sysdate-hiredate
  from emp;


 


4、 数学函数

l round(数字) 四舍五入



*  案例:按每月30天计算员工的每日薪水,要求计算结果四舍五入到小数点后2



                        函数:round(数字,精度)





 


 

select ename,round(sal/30,2) from emp;


 


             

l trunc(数字) 取整函数->只保留整数部分



*  案例:查询员工工作了多少个月




 


 

select ename,trunc(months_between(sysdate,hiredate)) from emp;


 


         

l floor(数字) 向下取



                        floor(1.9)  -> 1



l ceil(数字) 向上取



                        ceil(1.1) -> 2     花费 



l abs(数字) 取绝对值函数



l mod(数字1,数字2) 取余函数



                        mod(5,4) -> 1



l power(数字,n次方)



                       power(2,4) -> 16





作者:中软卓越天津ETC



阅读(399) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~