`
wang_zhi_peng2007
  • 浏览: 251979 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

decode( ) 函数使用

 
阅读更多

        DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能。

        DECODE有什么用途呢?先构造一个例子,假设我们想给职员加资,其标准是:工资在8000元以下的将加20%;工资在8000元以上的加15%,通常的做法是,先选出记录中的工资字段值,

   select salary into var-salary from employee

然后对变量var-salaryif-then-elsechoose 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,缺省值)

该函数的含义如下:
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)

ELSE
    RETURN(缺省值)
END IF

 

使用方法:

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)),
    sum(decode(substrb(month,5,2),'05',sell,0)),
    sum(decode(substrb(month,5,2),'06',sell,0)),
    sum(decode(substrb(month,5,2),'07',sell,0)),
    sum(decode(substrb(month,5,2),'08',sell,0)),
    sum(decode(substrb(month,5,2),'09',sell,0)),
    sum(decode(substrb(month,5,2),'10',sell,0)),
    sum(decode(substrb(month,5,2),'11',sell,0)),
    sum(decode(substrb(month,5,2),'12',sell,0))
    from sale
    group by substrb(month,1,4);

例:

select   decode   (col1,'1','11','2','22',0)   from   dual;   
      解释:如果为COL1字段为1时就返回值11,为2时返回值勤为22,其他的为0,你可以一直加的,成对匹配,最后一个多余的就是所有的其他情况!

 

  使用案例:decode

select hr_stay_id,  hr_person_name, depart_name, decode(stay_state, 1,'入住',2,'退房') stay_state, stay_money, stay_standard, to_char(begin_stay_date,'yyyy-mm-dd')begin_stay_date, begin_user_id, begin_person, begin_unit_id, begin_unit_name, begin_depart_id, begin_depart_name, create_date from hr_stay_info t where t.is_deleted=0 and t.stay_state=1 

  

分享到:
评论

相关推荐

    关于decode函数的使用

    ### 关于decode函数的使用详解 #### 函数概述 `decode()`函数在SQL语言中是一种常用的条件函数,它可以根据指定的表达式返回不同的值。这种功能对于数据转换、分类统计等场景非常有用。 #### 主要作用 `decode()`...

    decode函数.docx

    decode 函数也可以与其他函数结合使用,例如 LPAD 函数,可以实现一些复杂的字符串处理,例如: ```sql SELECT LPAD(DECODE(COUNT(记录编号),0,1,MAX(TO_NUMBER(记录编号)+1)),14,'0') 记录编号 FROM tetdmis ``` ...

    关于oracle decode函数的用法

    在商品销售表`sale`的转化示例中,使用了DECODE函数来将每月的销售数据从行转为列,形成年份为行,各月销售金额为列的新结构。例如,为了计算每年1月的销售总额,使用了`SUM(DECODE(SUBSTRB(month,5,2),'01',sell,0)...

    decode函数借鉴.pdf

    DECODE 函数还可以用来实现数据的格式转换,例如,在住房公积金报表置换实例中,我们可以使用 DECODE 函数来实现数据的转换和处理。 DECODE 函数是 Oracle 公司独家的功能强大的函数,它提供了简洁的运算方式、可控...

    decode函数.pdf

    不过,考虑到给定文件标题和描述的限定,“decode函数.pdf”,在这里我们主要聚焦于Decode函数的使用和功能。Decode函数在Oracle SQL和PL/SQL中的重要性不可忽视,它是实现条件逻辑判断的关键工具之一。

    decode函数[归类].pdf

    在示例中,对于工资调整的问题,DECODE函数可以这样使用: ```sql SELECT DECODE(SIGN(salary - 8000), >=0, salary * 1.15, -- 工资在8000元以上,加15% , salary * 1.2, -- 工资在8000元以下,加20% salary) -...

    ORACLE 列转行 DECODE函数用法

    下面我们将详细讲解DECODE函数的使用方法以及如何在列转行操作中应用它。 DECODE函数的基本语法如下: ```sql DECODE(column, value1, result1, value2, result2, ..., default_result) ``` 这里`column`是要检查的...

    Oracle 中 decode 函数用法

    DECODE函数还可以与其他函数结合使用,例如`LPAD`,用于在输出前填充零,确保数据的格式一致。例如,如果你有一个自增的主键,想在输出时自动加1并前面补零,可以这样做: ```sql SELECT LPAD(DECODE(COUNT(记录编号...

    oracle的decode函数

    ### Oracle的DECODE函数详解 #### 一、DECODE函数简介 在Oracle数据库中,`DECODE`函数是一种非常实用的条件判断函数,其功能类似于编程语言中的`IF`语句。通过比较输入值与一系列预设值,该函数能够根据匹配情况...

    Decode函数的用法(视图)

    要按学生ID分别显示语文、数学、英语的成绩,可以创建一个视图,使用`DECODE`函数将成绩列转换为单独的列。 创建视图的脚本如下: ```sql CREATE OR REPLACE VIEW cjd AS SELECT sid, DECODE(kcbm, '语文', cj,...

    Oracle中Decode()函数使用技巧

    下面将详细介绍Oracle Decode()函数的使用技巧。 1. **基本语法**: Decode()函数的基本语法如下: ``` DECODE(source, value1, result1, value2, result2, ..., default_value) ``` 其中,`source`是要检查的...

    用JavaScript实现PHP的urldecode/urldecode函数

    这个是 utf-8版本的 js实现 php的 urlencode() 和 urldecode()两个函数的功能。 在传送cookie的时候 在 php端实现 url编码 但要用 js来解码cookie的时候 就出现汉字不能不能识别的问题 这个 js 很好的解决

    decode函数与case when 的妙用

    在阅读博客文章《decode函数与case when 的妙用》时,作者可能分享了一些具体的示例和使用技巧,帮助我们更好地理解和掌握这两种方法。通过学习和实践,我们可以将这些知识应用于日常的数据库操作,优化数据处理流程...

    decode解码函数

    在ASP(Active Server Pages)环境中,可以使用内置的`Server.URLEncode`函数进行URL编码,而解码则可以使用`Server.URLDecode`函数。`Server.URLDecode("编码后的字符串")`会返回解码后的原始字符串。例如,如果有...

    Oracle DECODE函数语法使用介绍

    Oracle DECODE函数功能很强,下面就为您详细介绍Oracle DECODE函数的用法,希望可以让您对Oracle DECODE函数有更多的了解。 Oracle DECODE函数 Oracle DECODE函数是Oracle公司独家提供的功能,它是一个功能很强的...

    gzip124 decode函数说明

    `gzip124` 是一个压缩工具,其解码功能主要由 `decode` 或 `inflate_codes` 函数实现。这个函数是 gzip 解压过程中的关键部分,负责将压缩的二进制数据转换回原始格式。在理解这个过程之前,我们需要先了解一下 ...

    oracle中decode函数的使用方法

    `DECODE`函数的灵活性在于它可以处理多个可能的值,并且可以与其它函数如`LPAD`结合使用,增加数据处理的复杂性,如在生成自动递增的序列号并添加前导零: ```sql SELECT LPAD(DECODE(COUNT(记录编号), 0, 1, MAX...

Global site tag (gtag.js) - Google Analytics