• oracle中decode 结合 sign 使用


    sql中case when的另一种写法 decode sign

    1、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(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

    该函数的含义如下:
    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
    ;就可以了,
    细节讲一下:
        decode(u.sex ,1,男,女);其实decode底层应该是这样比较的(感觉)是u.sex==1?男:女(当然if else是可以的),我想说的是decode比较的是等于,其实并不能比较>或者是< 、>=、<=、只能是等于,但是我们可以结合sign(n)函数就很方便了,因为sign()返回的就是-1,0,1,我们可以根据这三个值来判断,例如:
       比较大小:
       a = 10,
        b=50.
        select decode(sign(A-B),1,'a>b',0,'相等',-1,'a<b') from (select  30 a ,50 b from dual);

      select decode (sign((select 1 from dual)-1),1,1,0,0,-1,1) from dual
    或者这样写
        select decode(sign(A-B),1,'a>b',0,'相等','a<b') from (select  30 a ,50 b from dual);

      select decode (sign((select 1 from dual)-1),1,1,0,0,-1) from dual
    上面语句转换一下成java:
         if((a-b)>=1)
           {
              return 'a>b';

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

    因此:sign和decode用到的几率还是蛮大的

  • 相关阅读:
    Fiddler使用教程(收藏)
    js类的几种写法
    对js中prototype的理解
    【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)--转
    js加载顺序
    html加载js那些事
    HTTP状态码详解
    JS编码解码
    css绝对定位、相对定位和文档流的那些事
    jQuery事件绑定方法bind、 live、delegate和on的区别
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/12144709.html
Copyright © 2020-2023  润新知