oracle中DECODE與CASE的用法區別


對於CASE與DECODE其實並沒有太多的區別,他們都是用來實現邏輯判斷。OracleDECODE函數功能很強,靈活運用的話可以避免多次掃描,從而提高查詢的性能。而CASE9i以后提供的語法,這個語法更加的靈活,提供了IF THEN ELSE的功能。想要知道他們具體的用法,我們先來看看他們的語法:

CASE表達式語法:

CASE還有另外一種語法:


DECODE語法就相對簡單的多,DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等於if1時,DECODE函數的結果返then1,...,如果不等於任何一個if值,則返回else。可以用函數或表達式來替代value,if,then,else從而作出一些更有用的比較。

從上面的語法可以看出CASE的語法一與DECODE更多的是用於等值判斷,可以這么說decode只能做等值的,case when可以做區間的,使用范圍來進行條件區分,decode能做到的,case when也能做到;如果想要用decode進行比較,則需要用到sign()函數。因此二者在固定比較條件時使用差不多。但是如果當比較條件不固定時,顯然case when會容易很多。

我們可以通過以下的例子來具體的了解他們的用法


上面兩個是用CASE的兩種語法來實現的,這種等值的比較,我們也可以用DECODE來實現,但需要注意的是DECODE必須用在SQL語句中


這三個均實現的都是向前台輸出c。可以看出decode像是case when的精簡版,當要實現的功能比較簡單時,用decode方便,簡潔.當decode滿足不了的時候我們可以用case來解決問題。就像不等值的比較


對於上面的例子依然輸出c,i是進行的不等值比較,需要使用的case表達式,不然則需要使用sign()配合使用。對於上面的CASE語句,需要說明一點


這時輸出的是a,那是因為CASE語句尋找when的優先級是從上到下。再多的when,也只有一個出口,即其中有一個滿足了expr就馬上退出case,這點需要牢記。

在此需要說明一點decode是oracle獨有的, case when是標准SQL的語法,mysql等其他版本數據庫中都可以使用。

實際情況中,我們經常會遇到縱表橫表相互轉化的問題,這時就需要用到DECODE函數來實現的,具體實現的方法,我們下次再說。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM