zoukankan      html  css  js  c++  java
  • Oracle中sign/decode/nvl/round/trunc/(+)/instr/substr/replace解释

    1. sign函数

    sign函数语法:

     sign(n);
    

    sign函数说明:

    取数字n的符号,大于0返回1,小于0返回-1,等于0返回0(n可以是表达式,(n-200))
    

    例子:

    a=10;  
    b=50;   
    sign(a-b) ==-1   
    sign(b-a) == 1   
    sign(a-10)==0
    

    2. decode函数

    decode函数语法:

     decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)  
    

    decode函数说明:

    IF 条件=值1 THEN      
        RETURN(翻译值1)     
    ELSIF 条件=值2 THEN     
        RETURN(翻译值2)    
        ......    
    ELSIF 条件=值n THEN     
        RETURN(翻译值n)     
    ELSE     
        RETURN(缺省值)     
    END IF    
    

    decode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3。
    当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多

    例子:

    有一张user表 这张表中有一个sex(性别)字段,但是字段的值是1或者0,我们需求是显示男或者女,因此处理,那么decode就可以解决了
    select decode(u.sex ,1,男,女) from user u;
    比较大小(结合sign):

       a = 10,  
       b=50.  
       decode(sign(a-b),1,'a>b',sign(a-b),0,'相等','a<b');  
    

    上面语句转换一下成java:

        if((a-b)>=1)  
    {  
        return 'a>b';  
    }  
        else if((a-b)==0)  
    {  
        return '相等'  
    }  
    else{return 'a<b'}  
    

    3.NVL函数

    NVL函数语法:

    NVL(E1, E2)    
    

    NVL函数说明:

    如果E1为NULL,则函数返回E2,否则返回E1本身。但此函数有一定局限,所以就有了NVL2函数。

    对数字型: NVL( comm,0);
    对字符型 NVL( TO_CHAR(comm), 'No Commission')
    对日期型 NVL(hiredate,' 31-DEC-99')
    

    例子:

    查询某个员工年薪,如果为空则用0代替

    select (sal+nvl(comm,o))*12 from emp where emp.pno=:pno;
    

    这里,comm是未定义的变量,代指数字类型。 nvl返回为0.

    拓展:

    NVL2函数:Oracle/PLSQL中的一个函数,Oracle在NVL函数的功能上扩展,提供了NVL2函数。
    NVL2(E1, E2, E3)的功能为:如果E1为NULL,则函数返回E3,若E1不为null,则返回E2。

    4. ROUND函数

    ROUND函数语法:

    ROUND(number[,decimals])
    

    ROUND函数说明:

    其中:number 待做截取处理的数值
    decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分,并四舍五入。如果为负数则表示从小数点开始左边的位数,相应整数数字用0填充,小数被去掉。需要注意的是,和trunc函数不同,对截取的数字要四舍五入。

    例子:

    SQL>   select   round(1234.5678,2)   from   dual;
    
    ROUND(1234.5678,2)
    ——————
    1234.57
    SQL>   select   round(1234.5678,0)   from   dual;
    
    ROUND(1234.5678,0)
    ——————
    1235
    SQL>   select   round(1234.5678,-2)   from   dual;
    
    ROUND(1234.5678,-2)
    ——————-
    1200
    

    5. trunc函数

    trunc函数语法

    5.1 TRUNC(number,num_digits)

    Number 需要截尾取整的数字。
    Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。
    TRUNC()函数截取时不进行四舍五入

    TRUNC(89.985,2)=89.98
    TRUNC(89.985)=89
    TRUNC(89.985,-1)=80
    

    5.2 TRUNC(date[,fmt])

    date 一个日期值
    fmt 日期格式,该日期将由指定的元素格式所截去。
    忽略它则由最近的日期截去

    1.select trunc(sysdate) from dual --2013-01-06 今天的日期为2013-01-06
    2.select trunc(sysdate, 'mm') from dual --2013-01-01 返回当月第一天.
    3.select trunc(sysdate,'yy') from dual --2013-01-01 返回当年第一天
    4.select trunc(sysdate,'dd') from dual --2013-01-06 返回当前年月日
    5.select trunc(sysdate,'yyyy') from dual --2013-01-01 返回当年第一天
    6.select trunc(sysdate,'d') from dual --2013-01-06 (星期天)返回当前星期的第一天
    7.select trunc(sysdate, 'hh') from dual --2013-01-06 17:00:00 当前时间为17:35 
    8.select trunc(sysdate, 'mi') from dual --2013-01-06 17:35:00 TRUNC()函数没有秒的精确
    

    6. (+)符号

    对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:

    1. (+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
    2. 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。
    3. (+)操作符只适用于列,而不能用在表达式上。
    4. (+)操作符不能与or和in操作符一起使用。
    5. (+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。

    6.1 左外连接(Left outer join/ left join)

     left join是以左表的记录为基础的,示例中Dave可以看成左表,BL可以看成右表,它的结果集是Dave表中的数据,在加上Dave表和BL表匹配的数据。换句话说,左表(Dave)的记录将会全部表示出来,而右表(BL)只会显示符合搜索条件的记录。BL表记录不足的地方均为NULL。
    
    select * from dave a left join bl b on a.id = b.id;
    select * from dave a,bl b where a.id=b.id(+);    -- 注意: 用(+) 就要用关键字where
    

    6.2 右外连接(right outer join/ right join)

    和left join的结果刚好相反,是以右表(BL)为基础的, 显示BL表的所以记录,在加上Dave和BL 匹配的结果。 Dave表不足的地方用NULL填充。
    
    select * from dave a right join bl b on a.id = b.id;
    select * from dave a,bl b where a.id(+)=b.id;
    

    6.3 全外连接(full outer join/ full join)

     左表和右表都不做限制,所有的记录都显示,两表不足的地方用null 填充。 全外连接不支持(+)这种写法。
    
    select * from dave a full join bl b on a.id = b.id;
    

    7. instr函数

    instr函数语法:

    instr(sourceString,destString [,start] [,appearPosition]) 
    

    instr函数说明:

    主要用于从一个字符串中查找指定子串的位置。

    instr('源字符串' , '目标字符串' ,'开始位置','第几次出现') 
    

    其中sourceString代表源字符串;destString代表要从源字符串中查找的子串;start代表查找的开始位置,这个参数可选的,默认为1;appearPosition代表想从源字符中查找出第几次出现的destString,这个参数也是可选的, 默认为1 。
    如果start的值为负数,则代表从右往左进行查找,但是位置数据仍然从左向右计算。
    返回值为:查找到的字符串的位置。

    例子:

    SQL> select instr('abcdefgh','de') position from dual;  --从1开始算 d排第四所以返回4 
    
    POSITION 
    ---------- 
       4 
    
    SQL>select instr('abcdefghbc','bc',3) position from dual;  --从第3个字符开始算起 第3个字符是c,所以从3开始以后的字符串找查找bc,返回9 
    
    POSITION 
    ---------- 
      9 
    
    SQL> select instr('qinyinglianqin','qin', 1, 2) position from dual;   --从第1个字符开始,查找第2次出现子串的位置 
    
    POSITION 
    ---------- 
      12 
    

    8. substr函数

    substr函数语法

    SUBSTR(cExpression,nStartPosition [,nCharactersReturned])
    

    substr函数说明

    主要作用是从给定的字符表达式或备注字段中返回一个子字符串。
    cExpression指定要从其中返回字符串的字符表达式或备注字段; nStartPosition用于指定返回的字符串在字符表达式或备注字段中的位置;nCharactersReturned用于指定返回的字符数目,缺省时返回字符表达式的值结束前的全部字符。

    例子

    SQL> select SUBSTR('abcdefghijklm' ,1,5) position from dual;
    
    POSITION 
    ---------- 
      abcde 
    
    SQL> select SUBSTR('abcdefghijklm' ,6) position from dual;
    
    POSITION 
    ---------- 
     fghijklm 
    
    SQL> select SUBSTR('abcdefghijklm' ,-2) position from dual;
    
    POSITION 
    ---------- 
      lm 
    

    9. replace函数

    replace函数语法

    REPLACE ( 'string_expression1' , 'string_expression2' , 'string_expression3' )
    

    replace函数解释

    replace('将要更改的字符串','被替换掉的字符串','替换字符串')
    

    例子:

    SQL> select REPLACE('abcdefghicde','cde','xxx') position from dual;
    
       POSITION 
    --------------- 
     abxxxfghixxx 
    
  • 相关阅读:
    伸展树(SplayTree)的实现
    map的访问
    #pragma warning(disable 4786)
    debian sftp/ssh197
    debian 配置静态ip197
    deepin 安装tar.gz197
    npm构建vue项目197
    linux 常用命令197
    application/force-download 不生效197
    reids 安装197
  • 原文地址:https://www.cnblogs.com/zjfjava/p/7506565.html
Copyright © 2011-2022 走看看