Oracle单组函数

 

--Upper  -------把字符转换成大写
      SELECT Upper ('abcde') FROM dual ;

--Lower   ----- 把字符转换成小写
      SELECT lower('ABCDE') FROM dual ;
 
--Initcap  -----返回所有单词的首字母大写,其他字母小写
       Select initcap(ename) from emp;
 
--Concat   -----字符串连接 ,相当于||
       Select concat('a','b')  from dual;
        Select 'a' || 'b' from dual;


--Substr -------查找字符串
       Select substr('abcde',length('abcde')-2) from dual;
       Select substr('abcde',-3,3) from dual;

   

       substr(string,position,substring_length)

      1、如果position=0,  则被当做1

      2、如果position>1,    则从position位置开始找

      3、如果position<1,    则从结尾开始找

      4、如果第三个位置没有指定,则从指定位置到结尾

 


--Length ------字符串的长度
       Select length(dname) from dept;

 
--Replace -----字符串替换 
       Select replace(ename,'a','A') from emp;


--Instr -- -----字符串查找,返回索引值
       Select instr('Hello World','or') from dual; --8 indexof


--Lpad   ------左侧填充
       select lpad('Smith',10,'*') from dual--左侧填充  *****Smith


--Rpad   ------右侧填充
       select rpad('Smith',10,'*') from dual--右侧填充  Smith*****


--Trim   -------过滤首位空格 
       select trim('    Mr Smith          ') from dual --过滤首尾空格   Mr Smith


--数值函数

 

--Round   -----四舍五入,取精度
       select round(462,-2) from dual;      ------负数往小数点前数    ----500
       select round(412.313,2) from dual; -----正数往小数点后数     ----412.13


 --Trunc   -----不四舍五入,直接取最大值
       select trunc(462.13,-2) from dual;                                      ----400

 

--日期函数
--Months_between()   -----两个时间之间隔了多少个月
       select months_between(sysdate,hiredate) from emp;


--Add_months()          ------在某个时间点上加一个月
        select add_months(sysdate,1) from dual;

 

--Next_day()
        select next_day(sysdate,'星期一') from dual; ----返回下一个星期一的日期


--Last_day
        select last_day(sysdate) from dual;             ----返回这个月的最后一天

 

--转换函数 

 

 

 

 

--To_char
        select to_char(sysdate,'yyyy') from dual;            ---2011
         select to_char(sysdate,'yyyy-mm-dd') from dual; ----2011-07-16
         select to_char(sal,'L999,999,999') from emp;       ----
         select to_char(sysdate,'D') from dual; --返回星期  ----7

 

 


--To_number
          select to_number('13')+to_number('14') from dual;    ------27      

 
--To_date
          Select to_date('2009-02-10','yyyy-MM-dd') from dual;  ----2009/2/10

 

         select to_char('001') from dual;                                     ----001
         select to_number('003')from dual;                                -----3


--通用函数
--NVL()函数    -----有值返回本身,无值返回0

        select nvl(comm,0) from emp;


--NULLIF()函数  ----如果表达式 exp1 与exp2 的值相等则返回 null,否则返回 exp1 的值

         nullif(exp1,exp2)

 
--NVL2()函数   
      select empno, ename, sal, comm, nvl2(comm, sal+comm, sal) total from emp;   ----如果comm不为null,返回sal+comm,否则返回comm


--COALESCE()函数 --依次考察各参数表达式,遇到非null值即停止并返 回该值。

      select empno, ename, sal, comm, coalesce(sal+comm, sal, 0)总收入  from emp;

 

--CASE表达式
      select empno, ename, sal,
           case deptno  
                when 10 then '财务部'
                when 20 then '研发部'
                when 30 then '销售部'
                else '未知部门'      
          end 部门
      from emp;

 

 

--DECODE()函数 --和 case表达式类似,decode()函数也用于实现多路分支结构
 
       select empno, ename, sal, 
            decode(deptno, 10, '财务部',
                                      20, '研发部',
                                      30, '销售部',
                                     '未知部门')      
                           部门 
       from emp;
 
 

 case在SQL中有两种写法,先建立一个表
         create table salgrade(grade int, sal int);

         insert into salgrade values(1,1000);
         insert into salgrade values(2,2000);
         insert into salgrade values(3,3000);

第一种写法,简单写法:
         select grade,sal,
             case grade
                when 1 then 'low'
                when 2 then 'middle'
                else 'high'
            end
         from salgrade;

第二种写法,查找写法:
         SELECT grade,sal,
              case when sal <=1000 then 'low'
                  when sal <=2000 then 'middle'
                  else 'high'
             end
         FROM salgrade;

decode只能代替第一种写法:
          select grade,sal,decode(grade,1,'low',2,'middle','high') from salgrade;

 

--单行函数嵌套
          select empno, lpad(initcap(trim(ename)),10,' ')    name, job, sal from emp;

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值