oracle中的null
1、oracle null的概述
https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements005.htm#SQLRF51083
根據官方11g文件
Oracle資料庫當前將長度為零的字元值視為null。但是,在將來的版本中,這可能不會繼續存在,Oracle建議您不要將空字串視為與空值相同。
可能的原因
val IS NOT NULL 比...更具可讀性 val != ''
無需檢查這兩個條件 val != '' and val IS NOT NULL
2、查詢空值
null 是不能用=判斷的,要用is null 或 is not null
select * from emp where name is not null
null 不支援 加減乘除,以及大小和等於的比較,否則只能為空
select * from dual where rownum != null 這個是查不出來資料的,應該用
select * from dual where rownum is not null
而對於其他函式應當測試一下用null時會返回什麼
比如 select replace('abcde','b',null) from dual; 他會返回acde ,b被替換為null,相當於刪除了源字串中的b
3、將空值轉換為實際值
3.1、coalesce
select coalesce('','cc') from dual 返回 字串cc 類似於nvl
但coalesce更好用,它支援多個引數,返回第一個不為空的值
比如
select coalesce('',null,'123') from dual 返回字串123
3.2、nvl
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm
NVL(expr1, expr2)
如果expr1為null,則NVL返回expr2。如果expr1不為null,則NVL返回expr1。
這些引數expr1和expr2可具有任何資料型別。如果它們的資料型別不同,則Oracle資料庫會隱式地將其中一個轉換為另一個。如果無法隱式轉換它們,則資料庫將返回錯誤。隱式轉換請點選官方文件
select nvl('',1),nvl(null,2) from dual;
也可以證明 空字串也被當做null
但含有空格的字串不是空值,也不會被當做null
select nvl(' ',1) from dual;