Oracle中nvl,nvl2,nullif,decode,coalesce函式
阿新 • • 發佈:2022-03-19
一、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 函式可以完成類似功能。
語法:
selectdecode(條件, 值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') ascol 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