﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-cloud Yang</title><link>http://www.cnitblog.com/cloud_soft/</link><description>该考虑个人问题了？！</description><language>zh-cn</language><lastBuildDate>Mon, 04 May 2026 19:21:59 GMT</lastBuildDate><pubDate>Mon, 04 May 2026 19:21:59 GMT</pubDate><ttl>60</ttl><item><title>关于SQL中的DECODE</title><link>http://www.cnitblog.com/cloud_soft/archive/2005/08/24/2289.html</link><dc:creator>Yang</dc:creator><author>Yang</author><pubDate>Wed, 24 Aug 2005 00:46:00 GMT</pubDate><guid>http://www.cnitblog.com/cloud_soft/archive/2005/08/24/2289.html</guid><wfw:comment>http://www.cnitblog.com/cloud_soft/comments/2289.html</wfw:comment><comments>http://www.cnitblog.com/cloud_soft/archive/2005/08/24/2289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cloud_soft/comments/commentRss/2289.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cloud_soft/services/trackbacks/2289.html</trackback:ping><description><![CDATA[<P><FONT size=2>本人一向是属于那种项目用到什么就去GOOGLE搜索的懒人，-_-b，今天才知道SQL里面还有个DECODE，相当于<BR>VB中的IIF，C中的?: 吧，还是能解决不少问题的。对了，这是ORACLE中的函数哦，咱也CTRL C CTRL V一把<BR><BR><BR></P>
<DIV class=title><A class=f20>Oracle中Decode()函数使用技巧</A></DIV>
<DIV class=wzcontent><A class=f1><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECODE函数是ORACLE <A class=bluekey href="http://www.yesky.com/key/697/595697.html" target=_blank>PL/S</A>QL是功能强大的函数之一，目前还只有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函数具备大于、小于或等于功能。</DIV>
<DIV class=fcontent>
<P>　　decode()函数使用技巧</P>
<P>　　·软件环境:</P>
<P>　　1、Windows NT4.0+ORACLE 8.0.4</P>
<P>　　2、ORACLE安装路径为:C:\ORANT</P>
<P>　　·<A class=bluekey href="http://www.yesky.com/key/2956/412956.html" target=_blank>含义</A>解释:</P>
<P>　　decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)</P>
<P>　　该函数的含义如下:</P>
<P>　　IF 条件=值1 THEN</P>
<P>　　RETURN(翻译值1)</P>
<P>　　ELSIF 条件=值2 THEN</P>
<P>　　RETURN(翻译值2)</P>
<P>　　......</P>
<P>　　ELSIF 条件=值n THEN</P>
<P>　　RETURN(翻译值n)</P>
<P>　　ELSE</P>
<P>　　RETURN(缺省值)</P>
<P>　　END IF</P>
<P>　　· <A class=bluekey href="http://www.yesky.com/key/3160/338160.html" target=_blank>使用方法</A>:</P>
<P>　　1、比较大小</P>
<P>　　select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值</P>
<P>　　sign()函数根据某个值是0、正数还是负数，分别返回0、1、-1</P>
<P>　　例如:</P>
<P>　　变量1=10，变量2=20</P>
<P>　　则sign(变量1-变量2)返回-1，decode解码结果为“变量1”，达到了取较小值的目的。</P>
<P>　　2、表、<A class=bluekey href="http://www.yesky.com/key/1918/276918.html" target=_blank>视图</A>结构转化</P>
<P>　　现有一个商品销售表sale，表结构为:</P>
<P>　　month　　　 char(6)　　　　　 --月份</P>
<P>　　sell　　　　number(10,2)　　　--月销售金额</P>
<P>　　现有数据为:</P>
<P>　　200001　　1000</P>
<P>　　200002　　<A class=bluekey href="http://www.yesky.com/key/69/505069.html" target=_blank>1100</A></P>
<P>　　200003　　1200</P>
<P>　　200004　　1300</P>
<P>　　200005　　1400</P>
<P>　　200006　　1500</P>
<P>　　200007　　1600</P>
<P>　　200101　　1100</P>
<P>　　200202　　1200</P>
<P>　　200301　　1300</P>
<P>　　想要转化为以下结构的数据:</P>
<P>　　year　　　char(4)　　　　　 --年份</P>
<P>　　month1　　number(10,2)　　　--1月销售金额</P>
<P>　　month2　　number(10,2)　　　--2月销售金额</P>
<P>　　month3　　number(10,2)　　　--3月销售金额</P>
<P>　　month4　　number(10,2)　　　--4月销售金额</P>
<P>　　month5　　number(10,2)　　　--5月销售金额</P>
<P>　　month6　　number(10,2)　　　--6月销售金额</P>
<P>　　month7　　number(10,2)　　　--7月销售金额</P>
<P>　　month8　　number(10,2)　　　--8月销售金额</P>
<P>　　month9　　number(10,2)　　　--9月销售金额</P>
<P>　　month10　　number(10,2)　　　--10月销售金额</P>
<P>　　month11　　number(10,2)　　　--11月销售金额</P>
<P>　　month12　　number(10,2)　　　--12月销售金额</P>
<P>　　结构转化的SQL语句为:</P>
<P>　　create or replace view</P>
<P>　　v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)</P>
<P>　　as</P>
<P>　　select</P>
<P>　　substrb(month,1,4),</P>
<P>　　sum(decode(substrb(month,5,2),'01',sell,0)),</P>
<P>　　sum(decode(substrb(month,5,2),'02',sell,0)),</P>
<P>　　sum(decode(substrb(month,5,2),'03',sell,0)),</P>
<P>　　sum(decode(substrb(month,5,2),'04',sell,0)),</P></DIV></FONT><img src ="http://www.cnitblog.com/cloud_soft/aggbug/2289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cloud_soft/" target="_blank">Yang</a> 2005-08-24 08:46 <a href="http://www.cnitblog.com/cloud_soft/archive/2005/08/24/2289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>