oracle中DECODE與CASE的用法區別

2021-09-06 19:41:47 字數 1594 閱讀 4931

對於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。可以看出decode像是case when的精簡版,當要實現的功能比較簡單時,用decode方便,簡潔.當decode滿足不了的時候我們可以用case來解決問題。就像不等值的比較

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

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

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

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

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 預設值...

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 預設值...

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 預設值...