【oracle】函数decode

decode()函数简介:主要作用将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);

使用方法:Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

SQL> select  *  from student0  for update;

ID                   NAME                 SEX                  CLASS

-------------------- -------------------- -------------------- --------------------

1                    苏苏苏学志辉=         1                     一年级

2                    李静博               1                            一年级

3                    沈娇娇               0                            二年级

4                    陈晓丽               0                            二年级

SQL> Select  id,name,decode(sex,1,'男',0,'女'),class from  student0;

ID                   NAME                 DECODE(SEX,1,'男',0,'女') CLASS

-------------------- -------------------- ----------------------- --------------------

1                    苏苏苏学志辉=         男                      一年级

2                    李静博               男                      一年级

3                    沈娇娇               女                      二年级

4                    陈晓丽               女                      二年级


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的用法

这里主要说的就是decode的用法,在很多时候这个函数还是很有用的。


select t.* from student0 t;

ID NAME SEX CLASS

1 苏学志 1 一年级

2 李静博 1 一年级

3 沈娇娇 0 二年级

4 陈晓丽 0 二年级


select t.id,t.name,decode(t.sex,'1','男生','0','女生','不男不女') as sex ,t.class from student0 t;

ID NAME SEX CLASS

1 苏学志 男生 一年级

2 李静博 男生 一年级

3 沈娇娇 女生 二年级

4 陈晓丽 女生 二年级


2.decode比较大小

注释:修改student0表 增加age字段 默认10;

alter table student0 add (age int default 10);

SQL> select * from student0 for update;

ID NAME SEX CLASS AGE

-------------------- -------------------- -------------------- -------------------- --------------------

1 苏学志 1 一年级 10

2 李静博 1 一年级 20

3 沈娇娇 0 二年级 80

4 陈晓丽 0 二年级 90

SQL>

拓展 说明:sign(value)函数会根据value的值为0,正数,负数,分别返回0,1,-1 ,SQL数学函数SIGN 在进行SQL查询时,我们通常会有这样一种需求,对一个自然数进行判断,如果为零,返回0,如果为负数,统一返回-1,如果为正数,统一返回1。这时就需要 sign() 函数的支持,下面为具体用法:一、SIGN(X)返回参数作为-1、0或1的符号,该符号取决于X的值为负、零或正。SELECT SIGN(-32); -> -1

SELECT SIGN(0); -> 0

SELECT SIGN(234); -> 1


需求:年龄在80以上的显示80以上,80以下的显示80以下,80的显示正好80

SQL> select * from student0;

ID NAME SEX CLASS AGE

-------------------- -------------------- -------------------- -------------------- ---------------------------------------

1 苏学志 1 一年级 10

2 李静博 1 一年级 20

3 沈娇娇 0 二年级 80

4 陈晓丽 0 二年级 90

SQL>

SQL> select t.id,t.name,t.sex,t.class,decode(sign(age-80),'1','80以上','-1','80以下','0','正好90') as sex from student0 t;

ID NAME SEX CLASS SEX

-------------------- -------------------- -------------------- -------------------- ------

1 苏学志 1 一年级 80以下

2 李静博 1 一年级 80以下

3 沈娇娇 0 二年级 正好90

4 陈晓丽 0 二年级 80以上

SQL>


需求:查找带有'娇'字的学生

select t.id,decode(instr(t.name,'娇'),'0','不含有娇','含有娇'),t.sex,t.age from student0 t;

SQL> select t.* from student0 t where instr(t.name,'娇')>0 ;

ID NAME SEX CLASS AGE

-------------------- -------------------- -------------------- -------------------- ---------------------------------------

3 沈娇娇 0 二年级 80

结果

select t.id,decode(instr(t.name,'娇'),'0','不含有娇','含有娇') as name,t.sex,t.age from student0 t;

ID NAME SEX AGE

-------------------- -------- -------------------- ---------------------------------------

1 不含有娇 1 10

2 不含有娇 1 20

3 含有娇 0 80

4 不含有娇 0 90

5.判断是否为空

SQL> select t.id,t.name,decode(t.age,NULL,'暂无数据',t.age) as age,t.sex,t.class from student0 t;

ID NAME AGE SEX CLASS

-------------------- -------------------- ---------------------------------------- -------------------- --------------------

1 苏学志 暂无数据 1 一年级

2 李静博 20 1 一年级

3 沈娇娇 80 0 二年级

4 陈晓丽 90 0 二年级

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值