oracle decode函数使用方法
小编寄语
哈喽!大家好,我是老李,decode()函数是oracle pl/sql是功能强大的函数之一,目前还只有oracle公司的sql提供了此函数,其他数据库厂商的sql实现还没有此功能。(*^▽^*)
工具/软件
·软件环境:
1、windows nt4.0+oracle 8.0.4
2、oracle安装路径为:c:/orant
方法/步骤
第1步
decode函数是oracle pl/sql是功能强大的函数之一,目前还只有oracle公司的sql提供了此函数,其他数据库厂商的sql实现还没有此功能。decode有什么用途 呢? 先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在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 是不是很简洁?
第2步
decode的语法:decode(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value 等于if1时,decode函数的结果返回then1,...,如果不等于任何一个if值,则返回else。初看一下,decode 只能做等于测试,但刚才也看到了,我们通过一些函数或计算替代value,是可以使decode函数具备大于、小于或等于功能。
第3步
该函数的含义如下:
if 条件=值1 then return(翻译值1)elsif 条件=值2 then return(翻译值2) ......elsif 条件=值n then return(翻译值n)else return(缺省值)end if第4步
该函数的含义如下:
if 条件=值1 then return(翻译值1)elsif 条件=值2 then return(翻译值2) ......elsif 条件=值n then return(翻译值n)else return(缺省值)end if第5步
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”,达到了取较小值的目的。
第6步
2、表、视图结构转化
现有一个商品销售表sale,表结构为:
month char(6) --月份
sell number(10,2) --月销售金额
现有数据为:
200001 1000
200002 1100
200003 1200
200004 1300
200005 1400
200006 1500
200007 1600
200101 1100
200202 1200
200301 1300
想要转化为以下结构的数据:
year char(4) --年份
month1 number(10,2) --1月销售金额
month2 number(10,2) --2月销售金额
month3 number(10,2) --3月销售金额
month4 number(10,2) --4月销售金额
month5 number(10,2) --5月销售金额
month6 number(10,2) --6月销售金额
month7 number(10,2) --7月销售金额
month8 number(10,2) --8月销售金额
month9 number(10,2) --9月销售金额
month10 number(10,2) --10月销售金额
month11 number(10,2) --11月销售金额
month12 number(10,2) --12月销售金额
第7步
结构转化的sql语句为:
create or replace view
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)),
第8步
补充1:
有学生成绩表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;第9步
补充2:
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值,则返回空值。第10步
以下是一个简单测试,用于说明decode函数的用法:
sql> create table t as select username,default_tablespace,lock_date from dba_users;table created.
sql> select * from t;
username default_tablespace lock_date
------------------------------ ------------------------------ ---------sys systemsystem systemoutln systemcsmig systemscott systemeygle usersdbsnmp systemwmsys system 20-oct-048 rows selected.
sql> select username,decode(lock_date,null,'unlocked','locked') status from t;username status
------------------------------ --------sys unlockedsystem unlockedoutln unlockedcsmig unlockedscott unlockedeygle unlockeddbsnmp unlockedwmsys locked8 rows selected.
sql> select username,decode(lock_date,null,'unlocked') status from t;
username status
------------------------------ --------sys unlockedsystem unlockedoutln unlockedcsmig unlockedscott unlockedeygle unlockeddbsnmp unlockedwmsys8 rows selected.以上就是文章“oracle decode函数使用方法”全部内容,如需学习更多电脑、手机使用经验方法教程、软件使用知识请在本站搜索,科普知识网专注于普及各类生活小常识、冷知识、等生活中常用的操作经验;如果本篇文章对您有帮助,请不吝支持本站。
本文链接:http://www.puzhishi.com/jingyan/242675.html
1.免责声明:本文编辑科普网——文章若无特殊说明,均属本站原创,若转载文章请注明网址。
2.本站除部分作品系原创外,其余均来自网络或其它渠道,本站保留其原作者的著作权!如有侵权,请与站长联系!
还没有评论,来说两句吧...