溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle中條件函數(shù)有哪些

發(fā)布時間:2022-03-29 10:53:56 來源:億速云 閱讀:442 作者:小新 欄目:編程語言

小編給大家分享一下Oracle中條件函數(shù)有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

條件函數(shù)

      NVL

                   NVL函數(shù)評估任何數(shù)據(jù)類型的列或者表達式是不是空值。如果原始項是空值,返回備選的非空值;否則,返回原始項。

                   NVL函數(shù)有兩個強制參數(shù)。語法:NVL(original,ifnull)。其中original表示要測試的項,如果original項計算為空,就返回ifnull。original和ifnull參數(shù)的數(shù)據(jù)類型必須一致。它們必須是相同的類型,或者可能將ifnull隱式轉(zhuǎn)換為original參數(shù)的類型。NVL函數(shù)返回值的數(shù)據(jù)類型與original參數(shù)的數(shù)據(jù)類型相同。

                   select nvl(1234) from dual;--錯誤

                   select nvl(null,1234) from dual; ---1234

                   select nvl(substr('abc',4),'No substring exists') from dual;

      NVL2

                   NVL2函數(shù)是對NVL函數(shù)的增強,但功能非常類似。NVL2函數(shù)評估任何數(shù)據(jù)類型的列或者表達式是不是空值。如果第一項不是空值,那么返回第二個參數(shù),否則返回第三個參數(shù)。

                   NVL2函數(shù)有三個強制參數(shù)。語法:NVL2(original,ifnotnull,ifnull),其中original表示被測試的項。如果original不是空值,就返回ifnotnull;如果original是空值,就返回ifnull。ifnotnull和ifnull參數(shù)的數(shù)據(jù)類型必須一致或者ifnull參數(shù)可以轉(zhuǎn)換為ifnotnull參數(shù)的數(shù)據(jù)類型,它們不能是LONG數(shù)據(jù)類型。它們可以是相同的類型,或者可以將ifnull轉(zhuǎn)換為ifnotnull參數(shù)的類型。NVL2函數(shù)返回的數(shù)據(jù)類型與ifnotnull參數(shù)的數(shù)據(jù)類型相同。

                   select nvl2(1234,1,'a string') from dual; --錯誤

                   select nvl2(null,1234,5678) from dual;  --5678

                   select nvl2(substr('abc',2),'Not bc','No substring') from dual;

      NULLIF

                   NULLIF函數(shù)測試兩項的相等性。如果它們相等,函數(shù)就返回空值,否則返回這兩個測試項的第一項。

                   NULLIF函數(shù)有兩個可以是任何數(shù)據(jù)類型的強制參數(shù),兩個參數(shù)類型必須一致,第一個參數(shù)不可以為空。語法:NULLIF(ifunequal,comparison_term),其中比較參數(shù)ifunequal和comparison_term。如果它們相同,返回NULL。如果它們不同,返回ifunequal參數(shù)。

                   select nullif(1234,1234) from dual;

                   select nullif('24-JUL-2009','24-JUL-09') from dual;

                   select nullif(1,null) from dual;  --1

                   select nullif(null,null) from dual;----返回ORA-00932: inconsistent datatypes: expected - got CHAR

      COALESCE

                   COALESCE函數(shù)從參數(shù)列表中返回第一個非空值。如果所有參數(shù)為空,那么返回空值。

                   COALESCE函數(shù)有兩個強制參數(shù)和任何數(shù)量的可選參數(shù)。語法:COALESCE(expr1,expr2,...,exprn),如果expr1不是空值,就返回它,否則,如果expr2不是空值,就返回它,以此類推。COALESCE函數(shù)是NVL函數(shù)的一般形式:

                   COALESCE(expr1,expr2)=NVL(expr1,expr2)

                   COALESCE(expr1,expr2)=NVL(expr1,NVL(expr2,expr3))

                   如果找到非空值,COALESCE返回的數(shù)據(jù)類型與第一個非空參數(shù)的數(shù)據(jù)類型相同。為了避免出現(xiàn)“ORA-00931:inconsistent date types”錯誤,所有非空參數(shù)的數(shù)據(jù)類型必須與第一個非空參數(shù)的數(shù)據(jù)類型一致。

                   select coalesce(null,null,null,'a string') from dual;

                   select coalesce(null,null,null) from dual;

                   select coalesce(substr('abc',4),'not bc','no substring') from dual;

                   select coalesce(substr('abc',4),'not bc',123) from dual;--錯誤

      DECODE

                   DECODE函數(shù)通過測試前兩項的相等性來實現(xiàn)if-then-else條件邏輯,如果它們相等,則返回第三個參數(shù),如果它們不相等,可能返回另一項。

                   DECODE函數(shù)至少使用三個強制參數(shù),但可以使用更多參數(shù)。語法:DECODE(expr1,comp1,iftrue1[,comp2,iftrue2...[,compN,iftrueN]][,iffalse])。這些參數(shù)的計算如下面的偽代碼示例:

                   if expr1 = comp1 then return iftrue1

                            else if expr1 = comp2 then return iftrue 2

                                     ...

                                     ...

                            else if expr1 = compN then return iftrueN

                            else return null | iffalse;

                   DECODE 函數(shù)的所有參數(shù)都可以是表達式。返回的數(shù)據(jù)類型與第一個匹配比較選項的數(shù)據(jù)類型相同的。表達式expr1被隱式轉(zhuǎn)換為第一個比較參數(shù)comp1的數(shù)據(jù)類型。計算其他比較參數(shù)comp2...compn時,也會將它們隱式轉(zhuǎn)換為comp1相同的數(shù)據(jù)類型。DECODE 認為兩個空值相等,因此如果expr1是空值,并且comp3是出現(xiàn)的第一個空值比較參數(shù),那么就會返回對應的結(jié)果參數(shù)iftrue3。

                   select decode(1234,123,'123 is a match') from dual;

                   select decode(1234,123,'123 is a match','No match') from dual;

                   select decode('search','comp1','true1','comp2','true2','search','true3',substr('2search',2,6),'true4','false') from dual;

                   select decode(null,'comp1','true1','comp2','true2',null,'true3','false') from dual;

                   select decode(1234,123,123,'No match') from dual; --‘No match'ORA-01722: invalid number 

      CASE表達式

                   CASE表達式在所有第三和第四代編程語言都可以實現(xiàn)。和DECODE函數(shù)一樣,CASE表達式使用if-then-else條件邏輯。CASE表達式有兩個變體。簡單的CASE表達式列出條件搜索項一次,由每個比較表達式來測試與搜索項的相等性。搜索的CASE表達式列出每個比較表達式的單獨條件。

                   CASE表達式至少使用三個強制參數(shù),但可以使用更多參數(shù)。其語法取決于是使用簡單CASE表達式還是使用搜索的CASE表達式。

                   簡單CASE表達式的語法:

                            CASE search_expr

                                     WHEN comparison_expr1 THEN iftrue1

                                     [WHEN comparison_expr2 THEN iftrue2

                                               ...

                                      WHEN comparison_exprN THEN iftureN]

                                     [ELSE iffalse]

                            END

                   簡單CASE表達式包含在CASE...END代碼塊內(nèi),由至少一個WHEN...THEN語句組成。在最簡單的情況下——只有一個WHEN...THEN語句,search_expr與comparison_expr1進行比較。如果它們相等,姥返回結(jié)果iftrue1。如果不相等,那么返回一個空值,除非定義了ELSE組件,這個情況返回默認的iffalse值。當CASE表達式中有多個WHEN...THEN語句時,就會不斷搜索匹配的比較表達式,直到找到匹配項為止。

                   搜索、比較和結(jié)果參數(shù)可以是列值、表達式或都字面值,但必須都是相同數(shù)據(jù)類型。

                            select

                                     case substr(1234,1,3)

                                               when '134' then '1234 is a match'

                                               when '1235' then '1235 is a match'

                                               when concat('1','23') then concat('1','23')|| ' is a match'

                                               else 'no match'

                                     end

                            from dual;

                   搜索的CASE表達式的語法:

                            CASE

                                     WHEN condition1 THEN iftrue1

                                     [WHEN condition2 THEN iftrue2

                                      ...

                                      WHEN conditionN THEN iftrueN]

                                     [ELSE iffalse]

                            END

                   搜索的CASE表達式包含在CASE...END代碼塊內(nèi),由至少一個WHEN...THEN語句組成。在最簡單的情況下——只有一個WHEN...THEN語句,計算condition1;如果它是true,那么返回結(jié)果iftrue1。如果不是,那么就返回一個空值,除非定義了ELSE組件,這種情況下,返回默認的iffalse值。當CASE表達式中有多個WHEN...THEN語句時,就會不斷搜索匹配的比較表達式,直到找到匹配項為止。

                            select

                                     case

                                               when length(substr(1234,1,3)) = 1 then 'length of substring is 1'

                                               when length(substr(1234,1,3)) = 2 then 'length of substring is 2'

                                               when length(substr(1234,1,3)) = 3 then 'length of substring is 3'

                                               else 'no match'

                                     end

                            from dual;

以上是“Oracle中條件函數(shù)有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI