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

含義解釋:

  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;? –取較小值

??????? select decode(sign(變量1-變量2), 1或0, 變量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);

從month中第5個字節開始取2個字節的值(substrb部分);
然后判斷該值,若該值等于’01’,則取sell列的值, 否則取0值(decode部分);
然后將這些累計求和(sum部分)。

oracle下,有substrb和substr等2個函數的,取的意義是完全不一樣的,一個是根據字符取,一個是根據字節取。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享