WEB開發 de 點滴

          by sanwish

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            38 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks
          ????????? 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、Windows NT4.0+ORACLE 8.0.4

          2、ORACLE安裝路徑為:C:\ORANT

          ·含義解釋:

          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)),

          posted on 2008-11-10 10:00 sanwish 閱讀(1471) 評論(0)  編輯  收藏 所屬分類: Sql
          主站蜘蛛池模板: 盐津县| 海阳市| 宁明县| 泰宁县| 棋牌| 鱼台县| 永胜县| 临西县| 嘉禾县| 张家界市| 洛浦县| 青海省| 和平区| 旬邑县| 广东省| 团风县| 通辽市| 连南| 天等县| 溧水县| 余庆县| 佳木斯市| 曲松县| 井冈山市| 疏附县| 启东市| 肥乡县| 四会市| 申扎县| 喀喇沁旗| 成武县| 乐至县| 甘德县| 广平县| 太原市| 乌兰浩特市| 诸城市| 永修县| 土默特右旗| 通州市| 武川县|