精华内容
下载资源
问答
  • decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN  RETURN(翻译值1) ELSIF 条件=值2 THEN  RETURN(翻译值2)  ...... ELSIF 条件=值n THEN  RETURN(翻译值n) ...
  • Oracle中decode函数用法解析以及常用场景

    万次阅读 多人点赞 2019-04-02 16:41:04
    1.decode函数的两种形式 第一种形式 含义解释: decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN  RETURN(翻译值1) ELSIF 条件=值2 THEN  RETURN(翻译值2)  ......

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

    sign()函数

    解释:
    sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

    用法示例:

    select id,sign(id-2) from t_decode;
    

    截图效果:
    在这里插入图片描述

    lpad()函数

    在字段id前边补字段0 长度为2

    select lpad(id,2,0) from t_decode;
    

    在这里插入图片描述

    2.decode的一些工作常用思路总结

    a.准备测试数据

    创建测试表t_decode,并插入测试数据

    //创建表,插入数据,查询
    create table t_decode(
           id integer,
           name varchar2(10)
    );
    
    //插入数据
    insert into t_decode values (1,'a');
    insert into t_decode values (2,'b');
    insert into t_decode values (3,'c');
    insert into t_decode values (4,'a');
    

    数据样式
    在这里插入图片描述

    b.第一种形式decode函数的常用思路
    1. 简单使用:判断字符串
    select id,name,
    	decode(id,1,'第一个',2,'第二个',3,'第三个','没有') new_id 
    from t_decode;
    

    在这里插入图片描述

    2.使用decode函数分段

    判断表中id大小并根据大小划分不同范围
    (-,2) low
    [2,4) mid
    [4,-] high

    select id,name,
       decode(sign(id - 4),1,'high id',0,'high id','-1',
                              decode(sign(id - 2),1,'mid id',0,'mid id',-1,'low id'))
    from t_decode; 
    

    在这里插入图片描述

    c.第二种形式decode函数的常用思路
    1. 比较大小
    -- 比较大小
    select decode(sign(100-90),-1,100,90) from dual;
    

    在这里插入图片描述

    2. 使用表达式来搜索字符串

    判断name中是否含有a?

    select id,name,decode(instr(name,'a'),0,'不含有a','含有a') as info from t_decode;
    

    在这里插入图片描述

    3. 实现行列转换

    注意:decode相当于:case when then else end语句

    select 
    	sum(decode(name,'a',id,0)) id_1,
    	sum(decode(name,'b',id,0)) id_2,
    	sum(decode(name,'c',id,0)) id_3 from t_decode;
    

    在这里插入图片描述

    添加测试:

    select 
       decode(name,'a',id,0) id_1,
       decode(name,'b',id,0) id_2,
       decode(name,'c',id,0) id_3 
    from t_decode;
    
    -- 相等于:case when then else end
    select 
    	case name when 'a' then id else 0 end as id_1,
        case name when 'b' then id else 0 end as id_2,
        case name when 'c' then id else 0 end as id_3 
    from t_decode;
    

    在这里插入图片描述

    4. 结合Lpad函数,如何使主键的值自动加1并在前面补0
    结合Lpad函数,如何使主键的值自动加1并在前面补0
    select lpad(decode(count(id),0,1,max(to_number(id)+1)),14,'0') new_id from t_decode;
    

    在这里插入图片描述

    拆分详细讲解

    select * from t_decode
    在这里插入图片描述
    select lpad(id,2,0) from t_decode
    在这里插入图片描述
    select to_number(id) from t_decode;
    在这里插入图片描述
    select max(to_number(id)+1) from t_decode;
    在这里插入图片描述
    select decode(count(id),0,1,max(to_number(id)+1)) from t_decode;
    在这里插入图片描述
    select lpad(decode(count(id),0,1,max(to_number(id)+1)),14,‘0’) new_id from t_decode;

    在这里插入图片描述

    展开全文
  • 一、DECODE函数相当于if条件语句,它将输入的值与函数的参数列比较,根据输入值返回一个对应值 1、语法:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 2、说明:当“条件”等于“值1”的...

    一、DECODE函数相当于if条件语句,它将输入的值与函数中的参数列比较,根据输入值返回一个对应值

     1、语法:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 
     2、说明:当“条件”等于“值1”的时候,显示“返回值1”,等于“值2”的时候,显示“返回值2”,依次类推,如果都不满足,则显示“缺省值”即默认值
     3、逻辑:类似于以下操作

    if(条件=值1){
       返回值1
    }else if(条件=值2){
        返回值2
    } 
       .
       .
       .
       .
       .
       .
    else{
       缺省值/默认值
    }

     4、举例

      (1)先了解数据表结构:id是数据id,login_name是账号,为方便演示,此处做了查询条件的限制

      (2)执行操作后的结果:当login_name的值是“test”的时候,输出“我是第一个”,当login_name的值是“mtest”的时候,输出“我是就是我”,当前面的情况都不满足时,输出“哈哈”

      (3)需要注意的是,当decode函数中只有4个值的时候【decode(条件,值,返回值1,返回值2)】,就要考虑只是做了一种判断,即条件满足值时输出返回值1,否则输出返回值2

       PS:图中涉及到的SQL,可复制后自行修改

    select id,login_name AS "账号" FROM SYS_USER where login_name like '%test%'
    
    
    select id,login_name AS "账号",DECODE(login_name,'test','我是第一个','mtest','我是就是我','哈哈') AS "输出内容"   FROM SYS_USER  where  login_name like '%test%'
    
    
    select id,login_name AS "账号",DECODE(login_name,'test','我是第一个','哈哈') AS "输出内容"   FROM SYS_USER  where  login_name like '%test%'
    

    二、与sign()函数结合使用

      1、sign是一种计算机函数,语法为sign(值),当值大于0时返回1,小于0时返回-1,等于0时返回0
      2、举例:id为数据的id,此处仅做参考作用,NO为编号


      3、结合使用

      (1)可以用来标记数据

     

     (2)同样可以用来做分段函数,如当薪资大于等于5000的时候,分段为“高薪”;当薪资大于等于3000且小于5000时属于“中薪”;小于3000属于低

       逻辑: 薪资与5千比较,返回-1表明小于5000,即往下执行-1对应的操作,反之大于等于5千,表示高薪;薪资与3000比较,返回-1则表示小于3000,即低薪,反之大于等于3千且小于5千属于中薪

       示例:

      说明: Ⅰ、sign(500-5000),返回-1,执行-1对应的操作,即decode(sign(500-3000)  , 1,'中薪',0,'中薪',- 1,'低薪'),sign(500-3000)返回-1,即返回值为“低薪”

                 Ⅱ、sign(6000-5000),返回1,即返回值为“高薪”

                 Ⅲ 、sign(3500-5000),返回-1,执行-1对应的操作,即decode(sign(3500-3000)  , 1,'中薪',0,'中薪',- 1,'低薪'),sign(3500-3000)返回1,即返回值为“中薪”

                 Ⅳ、sign(3200-5000),返回-1,执行-1对应的操作,即decode(sign(3200-3000)  , 1,'中薪',0,'中薪',- 1,'低薪'),sign(3200-3000)返回1,即返回值为“中薪”

                Ⅴ、sign(6000-5000),返回1,即返回值为“高薪”

                Ⅵ、sign(4500-5000),返回-1,执行-1对应的操作,即decode(sign(4500-3000)  , 1,'中薪',0,'中薪',- 1,'低薪'),sign(4500-3000)返回1,即返回值为“中薪”

      PS:图中涉及到的SQL,可复制后自行修改

    
    select id,NO AS "编号",sign(NO) AS "编号的返回值" FROM SYS_USER  where login_name like '%test%'
    
    
    select id,NO AS "编号",sign(NO) AS "编号的返回值",decode(sign(NO),-1,'编号为负数','0','编号为自然数0','编号是正数') AS "输出结果" FROM SYS_USER  where login_name like '%test%'
    
    
    
    SELECT
    	ID,
    	NO AS "薪资",
    	DECODE (
    		SIGN (NO - 5000),1,'高薪',0,'高薪' ,
    			- 1,DECODE (SIGN (NO - 3000), 1,'中薪',0,'中薪',- 1,'低薪')
    	)
    FROM
    	SYS_USER
    WHERE
    	login_name LIKE '%test%'

     三、结合SUM()函数实现表或者视图中的列转行

     需求:以账号为表头,显示对应的薪资数据

     1、先看原数据:

      2、利用decode函数实现根据账户名显示对应的薪资数据

      3、利用sum求和函数,实现最终需求

     关于第二步中的根据一条数据中的某一列显示该数据中的另一列数据,这个应该是decode算法的原因,具体没深研究,感兴趣的小伙伴儿可以自己研究

    PS:图中涉及到的SQL,可复制后自行修改

    select login_name AS "账号",NO AS "薪资"  FROM SYS_USER  where  login_name like 'test%'
    
    
    SELECT
    	DECODE (login_name, 'test', NO, 0) TEST,
    	DECODE (login_name, 'test01', NO, 0) test01,
    	DECODE (login_name, 'test1', NO, 0) test1,
    	DECODE (login_name, 'test123456789',NO,0) test123456789,
    	DECODE (login_name, 'testing', NO, 0) testing
    FROM
    	SYS_USER
    WHERE
    	login_name LIKE 'test%'
    
    
    SELECT
    	SUM (DECODE (login_name, 'test', NO, 0)) TEST,
    	SUM (DECODE (login_name, 'test01', NO, 0)) test01,
    	SUM (DECODE (login_name, 'test1', NO, 0)) test1,
    	SUM (DECODE (login_name,'test123456789',NO,0)) test123456789,
    	SUM (DECODE (login_name, 'testing', NO, 0)) testing
    FROM
    	SYS_USER
    WHERE
    	login_name LIKE 'test%'
    
    
    SELECT
    	DECODE (login_name, 'test', NAME, 0) TEST,
    	DECODE (login_name, 'test01',NAME, 0) test01,
    	DECODE (login_name, 'test1', NAME, 0) test1,
    	DECODE (login_name, 'test123456789',NAME,0) test123456789,
    	DECODE (login_name, 'testing', NAME, 0) testing
    FROM
    	SYS_USER
    WHERE
    	login_name LIKE 'test%'

    四、结合instr()函数,实现字符的搜索并返回结果

       1、先来了解下instr()函数:instr函数为字符查找函数,其功能是查找一个字符串在另一个字符串中首次出现的位置


       (1)语法:instr( string1, string2, start_position,nth_appearance )
                         string1:源字符串,要在此字符串中查找。
                         string2:要在string1中查找的字符串 。
                         start_position:代表string1 的哪个位置开始查找,此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。
                         nth_appearance:代表要查找第几次出现的string2.,此参数可选,如果省略,默认为 1。如果为负数系统会报

       注意:位置索引号从1开始。如果String2在String1中没有找到,instr函数返回0

    (2)示例:

    SELECT instr('syranmo','s') FROM dual; -- 返回 1
    SELECT instr('syranmo','ra') FROM dual; -- 返回 3
    SELECT instr('syran mo','at',1,2) FROM dual; -- 返回 0
    select instr('helloworld','l') from dual; --返回结果:3    默认第一次出现“l”的位置
    select instr('helloworld','lo') from dual; --返回结果:4   即:在“lo”中,“l”开始出现的位置
    select instr('helloworld','wo') from dual; --返回结果:6   即“w”开始出现的位置

     2、结合instr函数,实现需求

     PS:图中涉及到的SQL,可复制后自行修改

     
    SELECT login_name AS "账户",INSTR(login_name, 'test') AS "返回值",DECODE(INSTR(login_name, 'test'),0,'不含有test','含有test') AS "查询结果"  FROM SYS_USER  
     
     
    展开全文
  • 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)该函数的含义如下:IF 条件=值1 THENRETURN(翻译值1)ELSIF 条件=值2 THENRETURN(翻译值2)......ELSIF 条件=值n THENRETURN(翻译值n)...

    0b15eef15fe50b77c319496a1213b691.png

    含义解释:

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

    使用方法:

    1、比较大小

    select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值

    sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

    例如:

    变量1=10,变量2=20

    则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。

    2、此函数用在SQL语句中,功能介绍如下:

    Decode函数与一系列嵌套的 IF-THEN-ELSE语句相似。base_exp与compare1,compare2等等依次进行比较。如果base_exp和 第i 个compare项匹配,就返回第i 个对应的value 。如果base_exp与任何的compare值都不匹配,则返回default。每个compare值顺次求值,如果发现一个匹配,则剩下的compare值(如果还有的话)就都不再求值。一个为NULL的base_exp被认为和NULL compare值等价。如果需要的话,每一个compare值都被转换成和第一个compare 值相同的数据类型,这个数据类型也是返回值的类型。

    展开全文
  • oracle中decode函数用法

    2021-05-05 03:16:17
    oracle中decode函数用法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!DECODE函数相当于一条件语句(IF) 它将输入数值与函数的参数列表相比较 根据...

    oracle中decode函数用法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    324e430e2337e956f01b22b795d0362f.png

    DECODE函数相当于一条件语句(IF) 它将输入数值与函数中的参数列表相比较 根据输入值返回一个对应值 函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式 当然 如果未能与任何一个实参序偶匹配成功 则函数也有默认的返回值 区别于SQL的其它函数 DECODE函数还能识别和操作空值

    其具体的语法格式如下

    DECODE(input_value value result[ value result…][ default_result]);

    其中

    input_value 试图处理的数值 DECODE函数将该数值与一系列的序偶相比较 以决定最后的返回结果

    value  是一组成序偶的数值 如果输入数值与之匹配成功 则相应的结果将被返回 对应一个空的返回值 可以使用关键字NULL于之对应

    result  是一组成序偶的结果值

    default_result 未能与任何一序偶匹配成功时 函数返回的默认值

    下面的例子说明了 如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目 作为DECODE函数的实参支持值

    SELECT checkup_type

    DECODE(blood_test_flag Y Yes N No NULL None Invalid )

    FROM checkup;

    select f_ count(f_) as aa

    sum(decode(F_FETTLE )) as 未处理

    sum(decode(F_FETTLE )) as 处理中

    sum(decode(F_FETTLE )) as 已查结

    sum(decode(F_FETTLE )) as 已查实

    from t_supervi

    where F_SIGN=

    group by f_ lishixinzhi/Article/program/Oracle/201311/17980

    分页:123

    展开全文
  • NULL 博文链接:https://lisanlai.iteye.com/blog/793404
  • decode的几种用法1:使用decode判断字符串是否一样DECODE(value,if1,then1,if2,then2,if3,then3,...,else)含义为IF 条件=值1 THENRETURN(value 1)ELSIF 条件=值2 THENRETURN(value 2)......ELSIF 条件=值n THENRETURN...
  • 含义解释:decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) 该函数的含义如下: 代码如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ……ELSIF ...使用方法:1、比较大小
  • Decode函数的语法结构如下: 代码如下:decode (expression, search_1, result_1)decode (expression, search_1, result_1, search_2, result_2)decode (expression, search_1, result_1, search_2, result_2, …., ...
  • Oracle中decode函数用法含义

    千次阅读 2014-10-16 12:41:52
    值n,返回值n,缺省值) decode(字段或字段的运算,值1,值2,值3) SELECT DECODE (value, , ) FROM table 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3 当然值1,值2,值3也...
  • Oracle中decode 函数及其用法

    千次阅读 2017-04-27 17:18:26
    DECODE()函数,它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的...
  • Oracle数据库中decode函数使用

    千次阅读 2017-10-23 16:43:19
    decode函数使用方法:DECODE()函数,它将输入数值与函数的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功...
  • DECODE函数与一系列嵌套的IF-THEN-ELSE语句相似。base_exp与compare1,compare2等等依次进行比较。如果base_exp和 第i个compare项匹配,就返回第i 个对应的value。如果base_exp与任何的compare值都不匹配,则返回...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,638
精华内容 7,455
关键字:

oracle中decode函数用法