zoukankan      html  css  js  c++  java
  • 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函数具备大于、小于或等于功能。

      oracle 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                             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.
  • 相关阅读:
    jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
    如何使用 jMeter Parallel Controller
    使用 Chrome 开发者工具 coverage 功能分析 web 应用的渲染阻止资源的执行分布情况
    使用 Chrome 开发者工具的 lighthouse 功能分析 web 应用的性能问题
    关于 SAP 电商云首页加载时触发的 OCC API 请求
    SAP UI5 确保控件 id 全局唯一的实现方法
    SAP 电商云 Accelerator 和 Spartacus UI 的工作机制差异
    介绍一个好用的能让网页变成黑色背景的护眼 Chrome 扩展应用
    Chrome 开发者工具 performance 标签页的用法
    Client Side Cache 和 Server Side Cache 的区别
  • 原文地址:https://www.cnblogs.com/wllcs/p/5589901.html
Copyright © 2011-2022 走看看