Oracle SQL小示例系列-sign函数 decode函数

背景:

        近期在处理同事的存储过程的时候,由于业务规则的调整,发现对查询的数据类型列需要进行大小比较,满足两个数据相减,如果大于0,则取两个数据相减,否则取被减数。由于特殊场景,需要使用sign函数进行比较,decode函数进行选择实现上面的业务场景。

概念:

sign函数:

语法:  

      sign(n);

说明:  

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

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语句简单了许多

示例演示:

为获得两个字段的较大值或较小值:

A>B, A-B>0,sign(A-B)=1,获得大值即A, decode(sign(A-B),1,A,B)

A<B, A-B<0, sign(A-B)=-1,获得小值即A, decode(sign(A-B),-1,A,B)

现在以具体数据来演示:A为1,B为2

1.返回两个数值的较小值

语句:SELECT DECODE(SIGN(1-2),-1,1,2) FROM DUAL;

对应结果:

2.返回两个数值的较大值

语句:SELECT DECODE(SIGN(1-2),1,1,2) FROM DUAL;

对应结果:

业务场景中的实现:

业务描述:

        字段A与字段B进行比较,当A-B大于0时候,直接去A-B的值,若小于0,则取数字段A的值。

实现语句:

SELECT DECODE(SIGN(A-B), 1, A-B,-1,A) FROM TAB;

--

SELECT DECODE(SIGN(1-2), 1, 1-2,-1,1) FROM DUAL;


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值