oracle中DECODE与CASE的用法区别
對于CASE與DECODE其實并沒有太多的區別,他們都是用來實現邏輯判斷。Oracle的DECODE函數功能很強,靈活運用的話可以避免多次掃描,從而提高查詢的性能。而CASE是9i以后提供的語法,這個語法更加的靈活,提供了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??梢钥闯鰀ecode像是case?when的精簡版,當要實現的功能比較簡單時,用decode方便,簡潔.當decode滿足不了的時候我們可以用case來解決問題。就像不等值的比較
對于上面的例子依然輸出c,i是進行的不等值比較,需要使用的case表達式,不然則需要使用sign()配合使用。對于上面的CASE語句,需要說明一點
這時輸出的是a,那是因為CASE語句尋找when的優先級是從上到下。再多的when,也只有一個出口,即其中有一個滿足了expr就馬上退出case,這點需要牢記。
在此需要說明一點decode是oracle獨有的,?case?when是標準SQL的語法,mysql等其他版本數據庫中都可以使用。
實際情況中,我們經常會遇到縱表橫表相互轉化的問題,這時就需要用到DECODE函數來實現的,具體實現的方法,我們下次再說。
轉載于:https://www.cnblogs.com/longjshz/p/4286822.html
總結
以上是生活随笔為你收集整理的oracle中DECODE与CASE的用法区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《WebForm开发系列之控件篇》Ite
- 下一篇: GIS专业书籍、文档、数据、网站、工具等