Oracle decode函數

來源:互聯網
上載者:User

標籤:end   基本   sql查詢語句   exp   div   結構   比較   sel   scott   

decode函數在Oracle SQL查詢語句中的使用非常廣泛,也經常應用到PL/SQL語句塊中。

1,decode()函數語句的基本運算式是:

  decode(expr1,expr2,expr3,[expr4])

  這個運算式個人理解,可以稱之為decode的比較運算,可以對比 nvl()函數和 coalesce()函數。可以作如下理解該運算式:

  1,如果expr1 = expr2,decode函數返回expr3運算式的值;

  2,如果expr1 != expr2,decode函數返回expr4運算式的值,如果expr4未指定,則返回null;

  使用樣本1:

  

select decode(1,-1,100,90),decode(-1,-1,100,90),decode(0,-1,100) from dual;
DECODE(1,-1,100,90) DECODE(-1,-1,100,90) DECODE(0,-1,100)

------------------- -------------------- -------------------

    90           100           

  樣本說明:第一個decode函數運算式中,1 != -1,所以返回90;第二個decode函數運算式中,-1 = -1,所以返回100,第三個decode函數運算式中,0 != -1,但是未指定第4個運算式的值,所以函數返回null值。

  樣本2,decode函數另類用法:比如我們要查詢出emp表中,有獎金的員工和沒有獎金員工的總數量

  通常情況下,我們需要兩個查詢語句:

  select count(*) from emp where comm is not null;

  select count(*) from emp where comm is null;

  但是使用decode函數,我們可以在一行查詢中搞定:

  

 select sum(decode(nvl(comm,1),1,1,0)) count_no_comm,sum(decode(nvl(comm,1),1,0,1)) conut_comm from emp;COUNT_NO_COMM CONUT_COMM------------- ----------      10            4

  代碼說明:藉助於nvl() 函數來判定獎金comm是否為空白,如果為空白傳回值為1,然後拿nvl的傳回值和1進行比較,如果相等,返回1(說明comm為空白),不等返回0(說明comm不為空白); 最後sum對decode的返回結果進行加和,求出結果。

 

2,decode分段函數,是上述decode比較運算的一種變式,形式和case 運算式很相似,可以作為參考比較

  文法結構:

    decode(expr1,expr2,return_expr2, --如果expr1=expr2,返回return_expr2;

         expr3,return_expr2, --如果expr1=expr3,返回return_expr3;

            exprn,return_exprn, --如果expr1=expr2,返回return_exprn;

         exprx) [new_expr] --如果expr1不再上述expr2-exprn之間,返回return_exprx; new_expr為別名

  使用樣本:根據部門ID不同,對薪資進行相應的調整

  1,我們先用case運算式實現:

    

select ename,deptno,sal,case deptno when 10 then sal * 1.1                                               when 20 then sal * 1.2                                              when 30 then sal * 1.3                                              else sal                                     end new_salfrom emp order by deptno,new_sal;ENAME                    DEPTNO        SAL    NEW_SAL-------------------- ---------- ---------- ----------MILLER                       10       1800       1980CLARK                        10       2950       3245KING                         10       5000       5500SMITH                        20       1300       1560ADAMS                        20       1600       1920FORD                         20       3000       3600SCOTT                        20       3000       3600JONES                        20       3475       4170JAMES                        30       1450       1885WARD                         30       1750       2275MARTIN                       30       1750       2275TURNER                       30       2000       2600ALLEN                        30       2100       2730BLAKE                        30       3350       4355

  2,使用decode函數實現

  

select ename,deptno,sal,decode(deptno,10,sal * 1.1,                                20,sal * 1.2,                                30,sal * 1.3,                                sal) new_salfrom emp;ENAME                    DEPTNO        SAL    NEW_SAL-------------------- ---------- ---------- ----------SCOTT                        20       3000       3600SMITH                        20       1300       1560ALLEN                        30       2100       2730WARD                         30       1750       2275JONES                        20       3475       4170MARTIN                       30       1750       2275BLAKE                        30       3350       4355CLARK                        10       2950       3245KING                         10       5000       5500TURNER                       30       2000       2600ADAMS                        20       1600       1920JAMES                        30       1450       1885FORD                         20       3000       3600MILLER                       10       1800       1980

  在某些情況下,使用decode函數可以達到和case運算式一樣效果。

Oracle decode函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.