MySql的if函数和Oracle的decode函数

MySql的if函数和Oracle的decode函数

Oracle的decode函数

用法1含义:

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

解释:条件满足值1,则返回值1,满足值2,则返回值2,以此类推

用法2含义:

decode(字段或字段的运算,值1,值2,值3)

解释:这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3

MySQL的IF函数

IF(expr1,expr2,expr3)

解释:如果 满足expr1 (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

使用场景

1.翻译值

在这里插入图片描述

需求:查询出的数据,1表示男生,2表示女生

--Oracle
select t.id,
       t.name,
       t.age,
       decode(t.sex, '1', '男生', '2', '女生', '其他') as sex
  from STUDENT2 t
  
--MySql
select t.id,
	   t.name,
	   t.age,
	   if(t.sex ='1','男生',
         if(t.sex='2','女生','其他')) as sex
from STUDENT2 t

2.比较大小

说明:sign(value)函数会根据value的值为0,正数,负数,分别返回0,1,-1在这里插入图片描述

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

--Oracle
select t.id,
       t.name,
       t.age,
       decode(sign(t.age - 20),
              1,
              '20以上',
              -1,
              '20以下',
              0,
              '正好20',
              '未知') as sex
  from STUDENT2 t
  
 --MySql
select t.id,
       t.name,
       t.age,
       if(t.age-20>0,'20以上',(
				 if(t.age-20<0,'20以下',
        	if(t.age-20=0,'正好20','未知')))) as sex
  from STUDENT2 t

3.搜索字符串

在这里插入图片描述

需求:找到含有三的姓名

--Oracle
select t.id,
       decode(instr(t.name, '三'), 0, '姓名不含有三', '姓名含有三') as name,
       t.age,
       t.sex
  from STUDENT2 t

--MySql
select t.id,
       if(instr(t.name, '三')=0,'姓名不含有三', '姓名含有三') as name,
       t.age,
       t.sex
  from STUDENT2 t

参考:

https://blog.csdn.net/sdut406/article/details/82795585

posted @ 2021-03-16 15:57  刺猬鱼/  阅读(1759)  评论(0)    收藏  举报