和Null有關的函式
關於null相關的函式在日常的工作中還有比較實用的,可能會碰到各種和Null校驗相關的情況,大體有以下幾種。
case when
decode
nvl
nvl2
lnnvl
nullif
coalsce
-->case when
case when算是這個比較通用的方法,可以支援各種複雜的邏輯判斷,對於Null的校驗也不在話下,可能相對來說程式會略顯臃腫。在效能方面還沒有做更多的測試,暫時不好評估。
SQL> select case when (1=1) then 2 end from dual; -->如果1=1滿足,就返回2,否則返回null
CASEWHEN(1=1)THEN1END
---------------------
2
SQL> select case when (1=2) then 2 end from dual; -如果1=2成立,就返回2,否則返回null
CASEWHEN(1=2)THEN2END
---------------------
-->nvl
select nvl('expr1 is not null','expr1 is null') from dual; -->如果expr1不為Null,就輸出expr1 is null
NVL('EXPR1ISNOTNU
-----------------
expr1 is not null
SQL> select nvl(null,'expr1 is null') from dual; -->如果expr1為Null,就輸出expr1 is null
NVL(NULL,'EXP
-------------
expr1 is null
-->nvl2(expr1,expr2,expr3)
If expr1 is not null, then NVL2 returns expr2. If expr1 is null, then NVL2 returns expr3.
SQL> select nvl2(null,'expr1 is null return expr3','expr1 is not null return expr2') from dual; -->可以看到,expr1為null,就輸出了expr3
NVL2(NULL,'EXPR1ISNULLRETURNEX
------------------------------
expr1 is not null return expr2
SQL> select nvl2('1','expr1 is null return expr3','expr1 is not null return expr2') from dual; -->可以看到expr1不為Null,就輸出expr2
NVL2('1','EXPR1ISNULLRETUR
--------------------------
expr1 is null return expr3
-->lnnvl
這個問題可以建立一個表來測試一下,test_null,返回的結果都是相反的。
create table test_null (id number);
insert into test_null values(1);
insert into test_null values(2);
insert into test_null values(3);
SQL> select id from test_null where lnnvl(id<1); --如果id<1,就輸出id>=1
ID
----------
1
2
3
SQL> select id from test_null where lnnvl(id>=1); --如果id>=1,就輸出id>=1
no rows selected
SQL> select id from test_null where lnnvl(id=1);
ID
----------
2
3
-->nullif
這個函式類似如下的case when形式
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
SQL> select nullif(1,1)from dual;
NULLIF(1,1)
-----------
SQL> select nullif(1,2) from dual;
NULLIF(1,2)
-----------
1
SQL> select nullif(2,1)from dual;
NULLIF(2,1)
-----------
2
SQL> select nullif(1,null)from dual;
NULLIF(1,NULL)
--------------
1
SQL> select nullif(null,1)from dual; -可以看到如果expr1是Null,會報出ora-00932的錯誤,如果expr2是null,還是滿足條件有輸出的。
select nullif(null,1)from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got CHAR
decode
SQL> select decode(1,1,3,4)from dual;
DECODE(1,1,3,4)
---------------
3
SQL> select decode(1,2,3,4)from dual;
DECODE(1,2,3,4)
---------------
4
-->COALSCE
這個函式類似如下case when的形式
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
可以建立一個臨時的表來測試一下。可以看到在id1,id2,id3為空的時候輸出。
create table test_coalesce (id1 number,id2 number,id3 number);
insert into test_coalesce values(1,null,null);
insert into test_coalesce values(2,1,null);
insert into test_coalesce values(null,null,1);
SQL> select id1,id2,id3 from test_coalesce;
ID1 ID2 ID3
---------- ---------- ----------
1
2 1
1
SQL> select coalesce(id1,id2,id3) from test_coalesce;
COALESCE(ID1,ID2,ID3)
---------------------
1
2
1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1346967/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 有關箭頭函式函式
- linux下時間有關的函式和結構體Linux函式結構體
- 關於變數的宣告和定義、內部函式和外部函式變數函式
- 57.C檔案操作有關常用函式和模式整理函式模式
- 有關字串的一些好用的小函式字串函式
- C語言有關函式淺析C語言函式
- 簡單探討sum()函式返回null的問題函式Null
- SQL語句中聚合函式忽略NULL值的總結SQL函式Null
- 10,函式和方法相關的東西函式
- python 的數值和字串和相關內建函式Python字串函式
- DX12龍書 02 - DirectXMath 庫中與向量有關的類和函式函式
- Rust中的into函式和from函式Rust函式
- StretchBlt函式和BitBlt函式的區別和用法函式
- interrupt結構體和相關函式結構體函式
- 字串的相關函式字串函式
- call和apply第一個引數為null/undefined,函式this指向全域性物件APPNullUndefined函式物件
- strcpy函式和memcpy函式的區別函式memcpy
- JavaScript中的compose函式和pipe函式JavaScript函式
- JS 會有變數提升和函式提升JS變數函式
- vue2專案中 箭頭函式和普通函式里面 this的指向有何不同?Vue函式
- 關於建構函式與解構函式的分享函式
- # 普通函式和箭頭函式的區別函式
- 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的區別devNull
- 關於count函式的理解函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- JS基礎-函式、物件和原型、原型鏈的關係JS函式物件原型
- 全面瞭解Vue3的 reactive 和相關函式VueReact函式
- Processing中PImage類和loadImage()、createImage()函式的相關解析函式
- Kotlin之“with”函式和“apply”函式Kotlin函式APP
- 【SQL】17 SQL 檢視(Views)、SQL Date 函式、SQL NULL 值、SQLView函式Null
- C語言中函式printf()和函式scanf()的用法C語言函式
- js的函式和物件JS函式物件
- Rust 函式有哪些Rust函式
- javascript函式有哪些JavaScript函式
- 函式宣告與函式表示式有什麼區別?函式
- 指標函式 和 函式指標指標函式
- 函式基礎和函式引數函式
- 函式防抖和函式節流函式