1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 数据库 - 正文

君子好学,自强不息!

Oracle Decode函数的主要功能介绍

2022-11-23 | 数据库 | gtxyzz | 597°c
A+ A-

提及Oracle Decode函数,那么DECODE的主要用途是什么呢?我们先要构造一个相关的例子,假如我们想给某公司的职员增加工资的话,所定的标准为,工资少于8000元的将加20%;工资在8000元以上的加15%,通常的做法是,先选出记录 中的工资字段值?

selectsalaryintovar-salaryfromemployee

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

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

selectdecode(sign(salary-8000),1,
salary*1.15,-1,salary*1.2,salaryfromemployee

是不是很简洁?

DECODE的法:

DECODE(value,if1,then1,if2,then2,if3,then3,...,else)

表示如果value 等于if1时,DECODE函数的结果返回then1,…,如果不等于任何一个if值,则返回else。初看一下,DECODE 只能做等于测试,但刚才也看到了,我们通过一些函数或计算替代value,是可以使Oracle DECODE函数具备大于、小于或等于功能。

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、表、视图结构转化

现有一个商品销售表sale,表结构为:

month  char(6)  –月份

sellnumber(10,2) –月销售金额

现有数据为:

2000011000

2000021100

2000031200

2000041300

2000051400

2000061500

2000071600

2001011100

2002021200

2003011300

想要转化为以下结构的数据:

year char(4)  –年份

month1number(10,2) –1月销售金额

month2number(10,2) –2月销售金额

month3number(10,2) –3月销售金额

month4number(10,2) –4月销售金额

month5number(10,2) –5月销售金额

month6number(10,2) –6月销售金额

month7number(10,2) –7月销售金额

month8number(10,2) –8月销售金额

month9number(10,2) –9月销售金额

month10number(10,2) –10月销售金额

month11number(10,2) –11月销售金额

month12number(10,2) –12月销售金额

结构转化的SQL语句为:

createorreplaceview 
v_sale(year,month1,month2,month3,month4,month5,
month6,month7,month8,month9,month10,month11,month12) 
as 
select 
substrb(month,1,4), 
sum(decode(substrb(month,5,2),'01',sell,0)), 
sum(decode(substrb(month,5,2),'02',sell,0)), 
sum(decode(substrb(month,5,2),'03',sell,0)), 
sum(decode(substrb(month,5,2),'04',sell,0)), 

本文来源:1818IP

本文地址:https://www.1818ip.com/post/11217.html

免责声明:本文由用户上传,如有侵权请联系删除!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。