您好,登錄后才能下訂單哦!
小編給大家分享一下Oracle中條件函數有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
NVL函數評估任何數據類型的列或者表達式是不是空值。如果原始項是空值,返回備選的非空值;否則,返回原始項。
NVL函數有兩個強制參數。語法:NVL(original,ifnull)。其中original表示要測試的項,如果original項計算為空,就返回ifnull。original和ifnull參數的數據類型必須一致。它們必須是相同的類型,或者可能將ifnull隱式轉換為original參數的類型。NVL函數返回值的數據類型與original參數的數據類型相同。
select nvl(1234) from dual;--錯誤
select nvl(null,1234) from dual; ---1234
select nvl(substr('abc',4),'No substring exists') from dual;
NVL2函數是對NVL函數的增強,但功能非常類似。NVL2函數評估任何數據類型的列或者表達式是不是空值。如果第一項不是空值,那么返回第二個參數,否則返回第三個參數。
NVL2函數有三個強制參數。語法:NVL2(original,ifnotnull,ifnull),其中original表示被測試的項。如果original不是空值,就返回ifnotnull;如果original是空值,就返回ifnull。ifnotnull和ifnull參數的數據類型必須一致或者ifnull參數可以轉換為ifnotnull參數的數據類型,它們不能是LONG數據類型。它們可以是相同的類型,或者可以將ifnull轉換為ifnotnull參數的類型。NVL2函數返回的數據類型與ifnotnull參數的數據類型相同。
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函數有兩個可以是任何數據類型的強制參數,兩個參數類型必須一致,第一個參數不可以為空。語法:NULLIF(ifunequal,comparison_term),其中比較參數ifunequal和comparison_term。如果它們相同,返回NULL。如果它們不同,返回ifunequal參數。
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函數有兩個強制參數和任何數量的可選參數。語法:COALESCE(expr1,expr2,...,exprn),如果expr1不是空值,就返回它,否則,如果expr2不是空值,就返回它,以此類推。COALESCE函數是NVL函數的一般形式:
COALESCE(expr1,expr2)=NVL(expr1,expr2)
COALESCE(expr1,expr2)=NVL(expr1,NVL(expr2,expr3))
如果找到非空值,COALESCE返回的數據類型與第一個非空參數的數據類型相同。為了避免出現“ORA-00931:inconsistent date types”錯誤,所有非空參數的數據類型必須與第一個非空參數的數據類型一致。
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函數通過測試前兩項的相等性來實現if-then-else條件邏輯,如果它們相等,則返回第三個參數,如果它們不相等,可能返回另一項。
DECODE函數至少使用三個強制參數,但可以使用更多參數。語法:DECODE(expr1,comp1,iftrue1[,comp2,iftrue2...[,compN,iftrueN]][,iffalse])。這些參數的計算如下面的偽代碼示例:
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 函數的所有參數都可以是表達式。返回的數據類型與第一個匹配比較選項的數據類型相同的。表達式expr1被隱式轉換為第一個比較參數comp1的數據類型。計算其他比較參數comp2...compn時,也會將它們隱式轉換為comp1相同的數據類型。DECODE 認為兩個空值相等,因此如果expr1是空值,并且comp3是出現的第一個空值比較參數,那么就會返回對應的結果參數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表達式在所有第三和第四代編程語言都可以實現。和DECODE函數一樣,CASE表達式使用if-then-else條件邏輯。CASE表達式有兩個變體。簡單的CASE表達式列出條件搜索項一次,由每個比較表達式來測試與搜索項的相等性。搜索的CASE表達式列出每個比較表達式的單獨條件。
CASE表達式至少使用三個強制參數,但可以使用更多參數。其語法取決于是使用簡單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代碼塊內,由至少一個WHEN...THEN語句組成。在最簡單的情況下——只有一個WHEN...THEN語句,search_expr與comparison_expr1進行比較。如果它們相等,姥返回結果iftrue1。如果不相等,那么返回一個空值,除非定義了ELSE組件,這個情況返回默認的iffalse值。當CASE表達式中有多個WHEN...THEN語句時,就會不斷搜索匹配的比較表達式,直到找到匹配項為止。
搜索、比較和結果參數可以是列值、表達式或都字面值,但必須都是相同數據類型。
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代碼塊內,由至少一個WHEN...THEN語句組成。在最簡單的情況下——只有一個WHEN...THEN語句,計算condition1;如果它是true,那么返回結果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中條件函數有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。