【转】Oracle中Decode()函数运用技巧ITeye - 凯时娱乐

【转】Oracle中Decode()函数运用技巧ITeye

2019年03月24日11时40分43秒 | 作者: 曼彤 | 标签: 函数,出售,金额 | 浏览: 2415

阐明: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 是不是很简练。

 

     二、DECODE的语法:

     DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表明假如value 等于if1时,DECODE函数的成果回来then1,...,假如不等于任何一个if值,则回来else。初看一下,DECODE 只能做等于测验,但方才也看到了,咱们经过一些函数或核算代替value,是可以使DECODE函数具有大于、小于或等于功用。

DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

DECODE(字段,比较1,值1,比较2,值2,.....,比较n,值n缺省值)  


       三、该函数的意义如下:
               IF 条件=值1 THEN
           RETURN(翻译值1)
               ELSIF 条件=值2 THEN
           RETURN(翻译值2)
       ......
                 ELSIF 条件=值n THEN
            RETURN(翻译值n)
                 ELSE
            RETURN(缺省值)
                 END IF

 

四、decode()函数运用技巧

·软件环境:

1、Windows NT4.0+ORACLE 8.0.4

2、ORACLE装置途径为:C:/ORANT

· 运用方法:

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) 月份

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月出售金额

结构转化的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)),

 

弥补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;

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值,则回来空值。
以下是一个简略测验,用于阐明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                     

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯时娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2

    PostgresSQLITeye

    运用,一个,索引
  • 3
  • 4

    Oracle 数据库用户办理ITeye

    用户,权限,数据库
  • 5
  • 6

    mysql的字符串函数ITeye

    字符串,函数,字符
  • 7
  • 8

    pro*c 动态sql二ITeye

    数据,过错,成功
  • 9
  • 10