Oracle中decode函数详解

article/2025/10/12 18:58:12

【函数格式】:

        decode (

        expression,

        condition_01, result_01,

        condition_02, result_02,

        ......,

        condition_n, result_n,

        result_default)

【函数说明】:

  • 若表达式expression值与condition_01值匹配,则返回result_01,若不匹配,则继续判断;
  • 若表达式expression值与condition_02值匹配,则返回result_02,若不匹配,则继续判断;
  • 以此类推,若表达式expressioncondition_n值匹配,则返回result_n,若不匹配,则继续判断;
  • 若表达式expression值与以上所有的condition都不匹配,则返回默认值result_default,若省略result_default参数,则返回null

【函数解释】:

        其实,该函数的作用可以用以下一段if else条件语句进行更加形象地解释:
        if expression=condition_01 then

                return result_01;

        else

               if expression=condition_02 then

                        return result_02;

                else

                        ......

                        if expression=condition_n then

                                return result_n;

                        else

                                return result_default;

                        end if;

                end if;

        end if;

【使用形式】:

        因为该函数的匹配条件condition可以设置一个或多个,默认值result_default也可以省略,因此该函数具体的使用形式有以下几种:

  • decode (expression,condition_01,result_01)

        释义:expression与condition_01匹配,则返回result_01,否则返回null

  • decode (expression,condition_01,result_01,result_default)

        释义:expression与condition_01匹配,则返回result_01,否则返回result_default

  • decode (expression,condition_01,result_01,condition_02,result_02)

        释义:expression与condition_01匹配,则返回result_01,若不匹配,则继续判断,若expression与condition_02匹配,则返回result_02,否则返回null

  • decode (expression,condition_01,result_01,condition_02,result_02,result_default)

        释义:expression与condition_01匹配,则返回result_01,若不匹配,则继续判断,若expression与condition_02匹配,则返回result_02,否则返回result_default

  • decode(expression,condition_01,result_01,condition_02,result_02,......,condition_n,result_n)

        释义:expression与condition_01匹配,则返回result_01,若不匹配,则继续判断,若expression与condition_02匹配,则返回result_02,若不匹配,则继续判断,直到expression与condition_n匹配为止,返回result_n否则返回null

  • decode(expression,condition_01,result_01,condition_02,result_02,......,condition_n,result_n,result_default)

        释义:expression与condition_01匹配,则返回result_01,若不匹配,则继续判断,若expression与condition_02匹配,则返回result_02,若不匹配,则继续判断,直到expression与condition_n匹配为止,返回result_n否则返回result_default

【使用场景】:

创建演示数据

先建一张学生成绩表,建表语句如下所示:

-- Create table
create table T_STUDENT_GRADE
(
  studentid    VARCHAR2(50) not null,
  classid      VARCHAR2(50),
  engilshgrade NUMBER,
  chinesegrade NUMBER,
  mathgrade    NUMBER,
  gradelevel   VARCHAR2(50)
)
tablespace STUDINFO
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Add comments to the table 
comment on table T_STUDENT_GRADE
  is '学生成绩表(演示使用)';
-- Add comments to the columns 
comment on column T_STUDENT_GRADE.studentid
  is '学生id';
comment on column T_STUDENT_GRADE.classid
  is '班级id';
comment on column T_STUDENT_GRADE.engilshgrade
  is '英语成绩';
comment on column T_STUDENT_GRADE.chinesegrade
  is '语文成绩';
comment on column T_STUDENT_GRADE.mathgrade
  is '数学成绩';
comment on column T_STUDENT_GRADE.gradelevel
  is '成绩分类';
-- Create/Recreate primary, unique and foreign key constraints 
alter table T_STUDENT_GRADE
  add constraint PK_T_STUDENT_GRADE primary key (STUDENTID)
  using index 
  tablespace STUDINFO
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

再往表中插入数据,插入语句如下所示:

insert into T_STUDENT_GRADE (studentid, classid, engilshgrade, chinesegrade, mathgrade, gradelevel)
values ('stud01', 'clas01', 60, 70, 80, 'C');
insert into T_STUDENT_GRADE (studentid, classid, engilshgrade, chinesegrade, mathgrade, gradelevel)
values ('stud02', 'clas01', 75, 85, 95, 'B');
insert into T_STUDENT_GRADE (studentid, classid, engilshgrade, chinesegrade, mathgrade, gradelevel)
values ('stud03', 'clas01', 80, 90, 100, 'A');
insert into T_STUDENT_GRADE (studentid, classid, engilshgrade, chinesegrade, mathgrade, gradelevel)
values ('stud04', 'clas02', 55, 60, 65, 'D');
insert into T_STUDENT_GRADE (studentid, classid, engilshgrade, chinesegrade, mathgrade, gradelevel)
values ('stud05', 'clas02', 40, 50, 60, 'E');
insert into T_STUDENT_GRADE (studentid, classid, engilshgrade, chinesegrade, mathgrade, gradelevel)
values ('stud06', 'clas02', 100, 100, 100, 'S');
commit;

查询表中数据,查询结果如下所示:

1.将指定数据翻译或转换成其他形式

sql语句如下:

select GradeLevel,decode(GradeLevel,'S','完美','A','优秀','B','良好','C','较好','D','及格','E','不及格','其他') as gradeRemark from T_STUDENT_GRADE

返回结果如下图所示:

2.对指定数据按指定范围进行分段

sql语句如下:

 select mathgrade,decode(mathgrade,100,'完美',decode(sign(mathgrade-90),1,'优秀',0,'优秀',-1,decode(sign(mathgrade-80),1,'良好',0,'良好',-1,decode(sign(mathgrade-70),1,'较好',0,'较好',-1,decode(sign(mathgrade-60),'1','及格',0,'及格',-1,'不及格'))))) as mathGradeRemark from T_STUDENT_GRADE

返回结果如下图所示:

3.对表中指定数据进行行列转换

sql语句如下:

select 
decode(GradeLevel,'S',StudentId) Level_S,
decode(GradeLevel,'A',StudentId) Level_A,
decode(GradeLevel,'B',StudentId) Level_B,
decode(GradeLevel,'C',StudentId) Level_C,
decode(GradeLevel,'D',StudentId) Level_D,
decode(GradeLevel,'E',StudentId) Level_E
from 
T_STUDENT_GRADE

返回结果如下图所示:

4.判断指定数据是否符合指定特征

sql语句如下:

//判断英语分数是否及格

select engilshgrade,decode(sign(engilshgrade-60),1,'大于60分',0,'等于60分','低于60分') passFlag from T_STUDENT_GRADE

返回结果如下图所示:

5.对数据按照指定要求进行排序

sql语句如下:

select * from T_STUDENT_GRADE order by decode(GradeLevel,'S',1,'A',2,'B',3,'C',4,'D',5,'E',6) asc

返回结果如下图所示:

 


http://chatgpt.dhexx.cn/article/jgkgU0FB.shtml

相关文章

oracle中decode函数的使用

一、DECODE函数相当于if条件语句,它将输入的值与函数中的参数列比较,根据输入值返回一个对应值 1、语法:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) …

Oracle函数之DECODE函数

1.语法 2.用途 DECODE 函数将 expr 与 search 的值逐个比较。如果 expr 与 search 值相等,Oracle 返回 search 相应的 result。如果 expr 与 search 值都不匹配,Oracle 返回 default,如果没有函数中没有赋值 default,Oracle 返回…

java decode函数用法_decode函数的几种用法

1:使用decode判断字符串是否一样 DECODE(value,if1,then1,if2,then2,if3,then3,...,else) 含义为 IF 条件=值1 THEN RETURN(value 1) ELSIF 条件=值2 THEN RETURN(value 2) ...... ELSIF 条件=值n THEN RETURN(value 3) ELSE RETURN(default) END IF select empno, decode(empn…

Oracle decode函数

一 两种语法格式 1 decode(expression,value,result1,result2) 如果expressionvalue,则输出result1,否则输出result2 例子: (123,输出a) (12≠4,输出b) 2 decode(expre…

decode()函数简介

2019独角兽企业重金招聘Python工程师标准>>> decode()函数简介:主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);使用方法:Select decode(columnna…

冯诺依曼元胞计算机,冯诺依曼元胞自动机

冯诺依曼元胞自动机(John V on Neumann’s Cellular Automaton) 冯诺依曼元胞自动机是由计算机科学家约翰冯诺依曼发明的一种图灵完备的元胞自动机。目前它还有三种不同的规则,分别名叫:JvN29,Nobili32,Hutton32.可以模拟许多“机器”&#x…

元胞自动机学习笔记

元胞自动机学习笔记 2021.7.19 一、简介: 元胞自动机(cellular automata,CA):是一种时间,空间,状态都离散,空间相互作用和时间因果关系为局部的网格动力学模型,具有模拟复杂系统时空演化过程的能力。 二…

python实现元胞自动机

这是刚学习写代码时完成的,因此很多地方编写的可能不太美观,但运行起来没有问题,先发出来,之后有精力了在修改美化。 该元胞自动机的功能: 1.初始化按一定概率在各个位置生成元胞。 2.迭代,每次迭代元胞…

元胞自动机基本概念

目录 前言 一、元胞自动机的概述 二、元胞自动机的构成 1.元胞 2.元胞空间 3.元胞邻居 4.元胞规则 总结 前言 元胞自动机的寒假学习笔记,这里只是一些基本的概念,后面一篇文章会详细、具体地去介绍基于MATLAB元胞自动机的代码实现。&#xff08…

元胞自动机简单理解

元胞自动机 元胞自动机( Cellular Automata) 是 20 世纪 50 年代初由计算机之父冯诺依曼为了模拟生命系统所具有的自复制功能而提出来的网格动力学模型。 概念 元胞自动机采用离散的空间布局和离散的时间间隔,将元胞分成有限种状态&#x…

matlab元胞自动机入门详解

元胞自动机的初步理解 对元胞自动机的初步认识 元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元 胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状 态。变化规则适用于每一个元胞并且同时进行。元胞的…

元胞自动机-附代码注释

元胞自动机(Cellular Automata CA)是一种时空离散的局部动力学模型,是研究复杂系统的一种典型方法,适用于空间复杂系统的时空动态模拟研究。 元胞自动机不是由严格定义的物理方程或函数确定,而是用一系列模型构造的规则…

元胞自动机简介

摘要: 元胞自动机能利用简单的局部规则和离散方法描述复杂的全局的连续系统,已成为探索复杂系统的一种有效工具。文章 阐述了元胞自动机的发展历程、结构、特征及基本理论与方珐;介绍了元胞自动机在寡头垄断行为、交通管理及工程运输、城市…

数模笔记14-元胞自动机

元胞自动机模型 元胞自动机理论 元胞自动机(Cellular Automata,CA)是一种时空离散的局部动力学模型,是研究复杂系统的一种典型方法,特别适合用于空间复杂系统的时空动态模拟研究。 元胞自动机不是由严格定义的物理方程…

【数学建模】元胞自动机

前些天发现一个通俗易懂,风趣幽默的人工智能学习网站: 传送门 A 简介 1 历史 最初的元胞自动机是由冯 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 何顿 康威设计了一个电脑游戏 “生…

关于元胞自动机

元胞自动机(cellular automata,CA) 是一种时间、空间、状态都离散,空间相互作用和时间因果关系为局部的网格动力学模型,具有模拟复杂系统时空演化过程的能力。 其实在去年暑假准备国赛的时候试图过自学,但受限于,网上…

元胞自动机(数学建模)

一.元胞自动机的概念 元胞自动机(cellular automata,CA) 是一种时间、空间、状态都离散,空间相互作用和时间因果关系为局部的网格动力学模型,具有模拟复杂系统时空演化过程的能力。 元胞自动机是用一系列模型构造的规则构成,只要满…

元胞自动机

一个一个的格子看做是一个个的元胞,他们按照自己的规则自动进行状态改变就是元胞自动机。 定义:是一种时间、空间、状态都离散,空间相互作用和时间因果关系为局部的网格动力学模型,具有模拟复杂系统时空演化过程的能力。 元胞自…

元胞自动机简介(美赛复习一)

为美赛准备,进行元胞自动机的简单回顾。 本文只是简单回顾,可能会进行相关论文复现。 文章目录 一、简介 1.元胞2.元胞空间3.元胞邻居4.边界条件5.规则二、简单例子 一、简介 元胞自动机:是一种时间、空间、状态都离散,空间相互…

【数学建模】元胞自动机(CA)详解 + Matlab代码实现

文章目录 一、什么是元胞自动机?二、图解元胞自动机:三、案例Matlab代码实现:1.奇偶规则2.生命游戏3.森林火灾 一、什么是元胞自动机? 元胞自动机(cellular automata,CA) 是一种时间、空间、状态都离散,空…