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

oracle 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); 

 

 

Oracle-Decode()函数和CASE语句的比较。 首先,举2个简单的例子,简单对比一下这2者的区别。 1.CASE语句:

SELECT CASE SIGN(5 - 5) WHEN 1 THEN 'Is Positive' WHEN -1 THEN 'Is Negative' ELSE 'Is Zero' END FROM DUAL;

 

后台实现:

if (SIGN(5 – 5) = 1) { 'Is Positive'; } else if (SIGN(5 – 5) = 2 ) { 'Is Negative'; }else { ‘Is Zero’ }

 

2. Decode函数:

SELECT DECODE(SIGN(5 – 5), 1, 'Is Positive', -1, 'Is Negative', ‘Is Zero’) FROM DUAL

 

后台实现:

switch ( SIGN(5 – 5) ) { case 1 : 'Is Positive'; break; case 2 : 'Is Negative'; break; default : ‘Is Zero’ }

 

在上面的例子中,2者似乎都可以实现。但是,在碰到非凡的问题时Decode()要实现起来就相当复杂了。

例如:

SELECT CASE X-FIELD WHEN X-FIELD < 40 THEN ‘X-FIELD < 40’ WHEN X-FIELD < 50 THEN ‘X-FIELD < 50’ WHEN X-FIELD < 60 THEN ‘X-FIELD < 60’ ELSE ‘UNBEKNOWN’END FROM DUAL

 

因此,我个人认为,CASE语句在处理类似问题就显得非常灵活。当只是需要匹配少量数值时,用Decode更为简洁。

0
1
分享到:
评论

相关推荐

    关于oracle decode函数的用法

    关于oracle decode函数的用法

    Oracle 中 decode 函数用法

    decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN  RETURN(翻译值1) ELSIF 条件=值2 THEN  RETURN(翻译值2)  ...... ELSIF 条件=值n THEN  RETURN(翻译值n) ...

    Oracle DECODE函数语法使用介绍

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

    Oracle中Decode()函数的有关用法

    Oracle中Decode()函数的有关用法Oracle中Decode()函数的有关用法

    Oracle中Decode()函数使用技巧

    Oracle中Decode()函数使用技巧Oracle中Decode()函数使用技巧Oracle中Decode()函数使用技巧

    oracle中decode()函数使用技巧

    oracle中decode()函数使用技巧 很有帮助的哦

    ORACLE 列转行 DECODE函数用法

    NULL 博文链接:https://lisanlai.iteye.com/blog/793404

    oracle中decode函数的使用方法

    主要介绍了oracle中decode函数的使用方法,需要的朋友可以参考下

    oracle中decode函数的使用方法示例

    主要介绍了oracle中decode函数的使用方法示例,还是比较不错的,这里分享给大家,供需要的朋友参考。

    SQL中 decode()函数简介

    DECODE函数,是ORACLE公司的SQL软件ORACLE PL/SQL所提供的特有函数计算方式,以其简洁的运算方式,可控的数据模型和灵活的格式转换而闻名。 今天看别人的SQL时看这里面还有decode()函数,以前从来没接触到,上网...

    decode用法

    Oracle 中 decode 函数用法 含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN  RETURN(翻译值1) ELSIF 条件=值2 THEN  RETURN(翻译值2)  ...... ...

    Oracle_Database_11g完全参考手册.part2

    本书全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有新增功能和工具,如何执行功能强大的SQL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象-关系数据库。通过学习本书,您可以了解...

    Oracle数据库学习指南

    1. Decode()函数使用技巧(NT+IIS+ASP+ORACLE) 2. Dual伪列 3. EXP、IMP 命令详解 4. Exp-Imp大量数据 5. Export-Import 使用技巧与常见错误 6. NULL 使用详解 7. Oracle for NT系统实用工具介绍 8. Oracle ...

    oracle database 10g 完整参考手册part1

    第4章 规划Oracle应用程序——方法、风险和标准 第Ⅱ部分 SQL和SQL*Plus 第5章 SQL中的基本语法 第6章 基本的SQL*Plus报表及命令 第7章 文本信息的收集与修改 第8章 正则表达式搜索 第9章 数值处理 第10章 日期:...

    oracle的sql优化

     多使用Decode函数来作简单的代码和名称间的转换,以减少表关联  使用Truncate替代delete来删除记录,但Truncate数据不记录日志,无法进行回滚  对于复杂的存储过程可以多次提交的数据的要多分多次Commit,否则长...

    oracle中的decode的使用介绍

    含义解释: decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ……ELSIF 条件=值n THEN RETURN...使用方法:

Global site tag (gtag.js) - Google Analytics