oracle中DECODE与CASE的用法区别
對(duì)于CASE與DECODE其實(shí)并沒(méi)有太多的區(qū)別,他們都是用來(lái)實(shí)現(xiàn)邏輯判斷。Oracle的DECODE函數(shù)功能很強(qiáng),靈活運(yùn)用的話可以避免多次掃描,從而提高查詢的性能。而CASE是9i以后提供的語(yǔ)法,這個(gè)語(yǔ)法更加的靈活,提供了IF THEN ELSE的功能。想要知道他們具體的用法,我們先來(lái)看看他們的語(yǔ)法:
CASE表達(dá)式語(yǔ)法:
CASE還有另外一種語(yǔ)法:
DECODE語(yǔ)法就相對(duì)簡(jiǎn)單的多,DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等于if1時(shí),DECODE函數(shù)的結(jié)果返then1,...,如果不等于任何一個(gè)if值,則返回else。可以用函數(shù)或表達(dá)式來(lái)替代value,if,then,else從而作出一些更有用的比較。
從上面的語(yǔ)法可以看出CASE的語(yǔ)法一與DECODE更多的是用于等值判斷,可以這么說(shuō)decode只能做等值的,case?when可以做區(qū)間的,使用范圍來(lái)進(jìn)行條件區(qū)分,decode能做到的,case when也能做到;如果想要用decode進(jìn)行比較,則需要用到sign()函數(shù)。因此二者在固定比較條件時(shí)使用差不多。但是如果當(dāng)比較條件不固定時(shí),顯然case when會(huì)容易很多。
我們可以通過(guò)以下的例子來(lái)具體的了解他們的用法
上面兩個(gè)是用CASE的兩種語(yǔ)法來(lái)實(shí)現(xiàn)的,這種等值的比較,我們也可以用DECODE來(lái)實(shí)現(xiàn),但需要注意的是DECODE必須用在SQL語(yǔ)句中
這三個(gè)均實(shí)現(xiàn)的都是向前臺(tái)輸出c。可以看出decode像是case?when的精簡(jiǎn)版,當(dāng)要實(shí)現(xiàn)的功能比較簡(jiǎn)單時(shí),用decode方便,簡(jiǎn)潔.當(dāng)decode滿足不了的時(shí)候我們可以用case來(lái)解決問(wèn)題。就像不等值的比較
對(duì)于上面的例子依然輸出c,i是進(jìn)行的不等值比較,需要使用的case表達(dá)式,不然則需要使用sign()配合使用。對(duì)于上面的CASE語(yǔ)句,需要說(shuō)明一點(diǎn)
這時(shí)輸出的是a,那是因?yàn)镃ASE語(yǔ)句尋找when的優(yōu)先級(jí)是從上到下。再多的when,也只有一個(gè)出口,即其中有一個(gè)滿足了expr就馬上退出case,這點(diǎn)需要牢記。
在此需要說(shuō)明一點(diǎn)decode是oracle獨(dú)有的,?case?when是標(biāo)準(zhǔn)SQL的語(yǔ)法,mysql等其他版本數(shù)據(jù)庫(kù)中都可以使用。
實(shí)際情況中,我們經(jīng)常會(huì)遇到縱表橫表相互轉(zhuǎn)化的問(wèn)題,這時(shí)就需要用到DECODE函數(shù)來(lái)實(shí)現(xiàn)的,具體實(shí)現(xiàn)的方法,我們下次再說(shuō)。
轉(zhuǎn)載于:https://www.cnblogs.com/longjshz/p/4286822.html
總結(jié)
以上是生活随笔為你收集整理的oracle中DECODE与CASE的用法区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《WebForm开发系列之控件篇》Ite
- 下一篇: GIS专业书籍、文档、数据、网站、工具等