欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

oracle之decode函数用法详解

程序员文章站 2022-06-05 09:34:15
...

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, ...., search_n, result_n)
decode (expression, search_1, result_1, default)
decode (expression, search_1, result_1, search_2, result_2, default)
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)

decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。

eg1:

假设我们想给智星职员加工资,其标准是:工资在8000元以下的将加20%;工资在8000元以上的加15%通常的做法是,先选出记录 中的工资字段值?

 select salary into var-salary from employee,然后对变量var-salary用if-then-else或choose case之类的流控制语句进行判断。

如果用DECODE函数,那么我们就可以把这些流控制语句省略,通过SQL语句就可以直接完成。如下:

Select decode(sign(salary-8000),1,salary*1.15,-1,salary*1.2,salary from employee 

Select decode(sign(salary-8000),1,salary*1.15,-1,salary*1.2,salary from emploee)

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

例如:

  变量1=10,变量2=20

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

eg2:

有学生成绩表student,现在要用decode函数实现以下几个功能:

成绩>85,显示优秀;>70显示良好;>60及格;否则是不及格。假设student的编号为id,成绩为score,那么:

select id, decode(
    sign(score-85),1,'优秀',
        0,'优秀',
        -1, decode(sign(score-70),
        1,'良好',
        0,'良好',
        -1, decode(sign(score-60),
        1,'及格',
        0,'及格',
        -1,'不及格'))) 
from student;

eg:

Create table stu(
Id number(7),
Name varchar2(30),
Score number(7)
)

Insert into stu values(101,'某男1',92);
Insert into stu values(102,'某男2',82);
Insert into stu values(103,'某男3',72);
Insert into stu values(104,'某男4',62);
Insert into stu values(105,'某男5',52);
Insert into stu values(106,'某男6',88);
Insert into stu values(107,'某男7',95);
Insert into stu values(108,'某男8',65);

查询结果:

oracle之decode函数用法详解

相关标签: oracle sql