oracle的decode函数
以下转自百度, 类似于case... when... then...else...end...
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函数具备大于、小于或等于功能。

该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF1、比较大小
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;补充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值,则返回空值。
以下是一个简单测试,用于说明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-048 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 locked8 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
WMSYS8 rows selected.
oracle的decode函数的更多相关文章
- Oracle 中 decode 函数用法
Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...
- oracle的decode函数在mysql的实现
oracle中的decode函数很好用,换成mysql中可以用类似下面的方法实现: SELECT IF(TRUE, '真值', '假值'); 如果想再弄复杂点,可以多个IF嵌套,不过嵌套的层次多了,代 ...
- Oracle数据库DECODE函数的使用.
decode函数是Oracle数据库独有的. 语法为: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 例子:select decode(sign(变量1-变量2) ...
- Oracle 中 decode 函数用法(转)
含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THE ...
- Oracle中decode函数 列变成行
create table t_class(c_Id number(10) primary key ,stuName varchar2(50), --人名c_Name varchar2(50), ...
- 【转载】oracle中decode函数用法
1.DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else).表示假设value 等于if1时,DECODE函数的结果返回then1 ...
- oracle使用DECODE函数来减少处理时间
使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. 例如: SELECT COUNT(*),SUM(SAL) FROM EMP WHERE DEPT_NO = 0020 AND ENAM ...
- Oracle用decode函数或CASE-WHEN实现自定义排序
1 问题 对SQL排序,只要在order by后面加字段就可以了,可以通过加desc或asc来选择降序或升序.但排序规则是默认的,数字.时间.字符串等都有自己默认的排序规则.有时候需要按自己的想法来排 ...
- ORACLE,DECODE函数和排名函数DENSE_RANK函数的使用
这几天写一个报表的页面,从很恶心的数据结构中做一个聚合函数的查询,结构大概是这个样子的: 所以有:对数据group by t.id,t.name.t.course 这样三层排序,然后用函数去取值. d ...
随机推荐
- Search Insert Position leetcode java
Given a sorted array and a target value, return the index if the target is found. If not, return the ...
- JavaScript中textRange对象使用方法总结
TextRange对象是动态HTML(DHTML)的高级特性,使用它可以实现很多和文本有关的任务,例如搜索和选择文本.文本范围让您可以选择性的将字符.单词和句子从文档中挑选出来.TextRange对象 ...
- jdbc操作数据库并自动获取字段类型
//获取改功能编码的关联功能 public void getLinkdb(String gnbianma){ PreparedStatement pstmt = null; ResultSet rs ...
- 清空npm缓存
nodejs 清空 npm 缓存 npm cache clean -f
- $(...).modal is not a function
bootstrap中调用$(...).modal 方法 提示一个错误 is not a function 检查HTML结构发现,是因为使用了多个Jquery版本,产生了冲突. 解决办法:删掉一个Jqu ...
- Idea不能新建package的解决
右键–>new –> Mark Directory As –> Sources Root (idea需要修改一下目录的性质,改为源文件 )
- 编程王道,唯“慢”不破
原文地址 人和人之间编程速度的差异还是很大的,有的程序猿写代码非常快,有的却常常是龟速.Jeffrey Ventrella 最近在一篇文章里探讨了这种编程速度的差异,他是绝对的龟速派代表,来看看他对编 ...
- 安装logstash+kibana+elasticsearch+redis搭建集中式日志分析平台
安装logstash+kibana+elasticsearch+redis搭建集中式日志分析平台 2014-01-16 19:40:57| 分类: logstash | 标签:logstash ...
- 视图控制器生命周期中各个重要的方法(Swift) (Important Methods during the Lifecycle of a View Controller)
1. init(coder:) 它是视图控制器从故事板创建实例的默认初始化函数.(It is the initializer for UIViewController instances create ...
- .net 关于匿名类型的特性
匿名类型 1: var n1 = new { name = "name1", age = 40 }; 2: var n2 = new { name = "name2&qu ...