DECODE函数和SIGN函数详解

SIGN函数

一、基本语法

sign是符号函数,基本语法如下:

sign(n)

如果n>0,则返回1;如果n=0,则返回0;如果n<0,则返回-1。

二、案例演示

【案例1】
select sign( 100 ),sign(- 100 ),sign( 0 ) from dual;

在这里插入图片描述

decode函数

一、基本语法

decode 函数基本语法如下:

decode(字段|表达式,值1,结果1,值2,结果2...,值n,结果n,缺省值);

--缺省值可以省略

说明:如果字段|表达式等于值1时,DECODE函数返回结果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 函数 ,只能在select 语句中使用。

二、案例演示

【案例1】使用decode函数匹配员工姓名
SELECT employee_id,
DECODE(employee_id,
100,'Steven',
101,'Neena',
102,'Lex'
'unknow') AS first_name 
FROM employees 
where rownum<=5;

注:mysql没有decode函数,可以用case when函数实现。

SELECT employee_id,
(CASE WHEN employee_id=100 THEN 'Steven'
WHEN employee_id=101 THEN 'Neena'
WHEN employee_id=102 THEN 'Lex'
ELSE 'unknow'
END) AS first_name
FROM employees 
ORDER BY employee_id
LIMIT 5;

在这里插入图片描述

【案例2】使用decode函数比较大小

输出两个数中的较小值:

select decode(sign(var1-var2),-1,var 1,var2) from dual

示例:

select decode(sign(100-90),-1,100,90) as 较小值 from dual;

在这里插入图片描述

【案例3】用decode函数实现以下功能:如果工资>20000,显示A级别;>15000,显示B级别;>10000,显示C级别;否则,显示D级别。
select salary, decode(sign(salary-20000),1,'A',0,'A',-1, 
decode(sign(salary-15000),1,'B',0,'B',-1, 
decode(sign(salary-10000),1,'C',0,'C',-1,'D'))) as 工资级别
from employees;

注:mysql没有decode函数,可以用case when函数实现。

SELECT salary,
CASE 
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END AS 工资级别
FROM employees;

在这里插入图片描述

【案例4】利用decode实现表或者视图的行列转换
select e.name,e.sal from scott.emp e;

在这里插入图片描述

select 
    sum(decode(e.ename,upper('smith'),sal,0)) smith,
    sum(decode(e.ename,upper('allen'),sal,0)) allen,
    sum(decode(e.ename,upper('ward'),sal,0)) ward,
    sum(decode(e.ename,upper('jones'),sal,0)) jones,
    sum(decode(e.ename,upper('martin'),sal,0)) martin
 from scott.emp e ;

在这里插入图片描述


在这里插入图片描述

图片来源于网络

参考链接:https://www.cnblogs.com/jiaxinwei/p/10252513.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值