七达网是国内最新、最齐、最安全的软件下载基地!

关于我们最近更新热门排行

首页 软件 游戏 应用 文章 专题

新闻资讯软件应用软件教程 编程开发操作系统游戏攻略安卓应用安卓游戏
当前位置:首页 ›› 软件教程 ›› Oracle Decode函数用法介绍

Oracle Decode函数用法介绍

2016-03-22 15:26   作者:佚名   来源:本站整理   浏览:111   评论:2  

Decode函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能。下面就由七达网下载小编向大家介绍一下Oracle Decode函数用法介绍

Oracle Decode函数用法使用教程

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.比较大小
  
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 SYSTEM
SYSTEM SYSTEM
OUTLN SYSTEM
CSMIG SYSTEM
SCOTT SYSTEM
EYGLE USERS
DBSNMP SYSTEM
WMSYS SYSTEM 20-OCT-04
8 rows selected.

SQL> select username,decode(lock_date,null,'unlocked','locked') status from t;
USERNAME STATUS
------------------------------ --------
SYS unlocked
SYSTEM unlocked
OUTLN unlocked
CSMIG unlocked
SCOTT unlocked
EYGLE unlocked
DBSNMP unlocked
WMSYS locked
8 rows selected.
SQL> select username,decode(lock_date,null,'unlocked') status from t;
USERNAME STATUS
------------------------------ --------
SYS unlocked
SYSTEM unlocked
OUTLN unlocked
CSMIG unlocked
SCOTT unlocked
EYGLE unlocked
DBSNMP unlocked
WMSYS
8 rows selected.

Tags:责任编辑:xwyoo78946
    1. NavicatNavicat Premium

      本站为大家提供了Navicat 12的说有版本免费下载,含有Navicat使用教程详解,让你从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。它与 Amazon RD...

    软件评论

    请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关!

        登录   注册
    猜你喜欢