1. 程式人生 > 其它 >Oracle中nvl,nvl2,nullif,decode,coalesce函式

Oracle中nvl,nvl2,nullif,decode,coalesce函式

一、nvl函式

功能:從兩個表示式返回一個非 NULL 值。

語法:

select nvl(expression1, expression2)
-- 如果 expression1 計算結果為 null,則返回 expression2
-- 任意一種資料型別
-- 如果 expression1、expression2 都為null則返回null

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

返回值型別:字元型、日期型、日期時間型、數值型、貨幣型、邏輯型或 null 值。

兩個表示式資料型別必須一致。

二、nvl2函式

語法:

select nvl2(expression1, expression2, expression3)
-- expression1 不為null則返回 expression2 -- expression1 為null則返回 expression3

expression2 和 expression3 型別不同情況下,會強制轉換為 expression2 資料型別。

select nvl2(expr, 1, 0) from dual;

三、nullif函式

語法:

select nullif(100, 200)
-- 100

說明:相等返回null,不等返回 expression1。

四、decode函式

SQL中沒有邏輯判斷語句(分支語句),decode 函式可以完成類似功能。

語法:

select
decode(條件, 值1, 返回值1, 值2, 返回值2..., 值n, 返回值n, 預設值); /* IF 條件 = 值1 THEN     RETURN(返回值1) ELSIF 條件 = 值2 THEN     RETURN(返回值2)     ...... ELSIF 條件 = 值n THEN     RETURN(返回值n) ELSE     RETURN(預設值) END IF */

應用:結合 lpad 補全函式,可以使主鍵的值自動加1並補0。

select lpad(decode(count(id), 0, 1, max(to_number(id)+1)), 14, '0') as
col from dual;

應用:性別統計。

select decode(sex, '', 1, 0), decode(sex, '', 1, 0) from table_name;

應用:order by 對字元進行特定的排序。

select * from table_name
order by decode(subject_name, '語文', 1, '數學', 2, '英語', 3);

 

五、coalesce函式

coalesce(expr1, expr2, expr3….. exprn)
返回表示式中第一個非空表示式,如果都為空則返回空值。如果所有自變數均為 NULL,則 COALESCE 返回 NULL 值。
所有表示式必須是相同型別,或者可以隱式轉換為相同的型別,否則報錯。

語法:

SELECT COALESCE(NULL,NULL,3,4,5) FROM dual
--3