Oracle的null和空串【一切有為法,如夢幻泡影 】

哎呀我的天吶發表於2022-08-22
drop table x purge;
create table x (id number,name varchar(100));
insert into x values (1,' ');
insert into x values (2,'');
insert into x values (3,'a');
insert into x values (4,null);
commit;
col name for a20
set linesize 300
select * from x;

Oracle 認為''和null是等價的

coalesce判斷邏輯正確,2和4是null所以返回xxxxxx 

因為'' == null ,所以沒人任何值等於'' 或(沒有任何值等於null)



SELECT 
decode(length(name),NULL,0,LENGTH(name)) ,
length(name),
dump(name),
dump(name,16)
FROM x;


在Oracle的內建函式中,大部分函式如果有null的參與,其結果也為null;

select substr(null,1,2) as str from dual;
select instr(null,'a',1,2) as str from dual;
select round(null,2) as str from dual;
select to_char(null) as str from dual;
select to_number(null) as str from dual;

如上語句,它們執行並不會報錯,它們有結果。但執行後得到的都為null。

在oracle資料庫中,不論是任何運算,只要有null參與,最後的結果一定是null。

select 10*null as num from dual;
select 10+null as num from dual;
select 10-null as num from dual;
select 10/null as num from dual;

如上語句在oracle中,執行得到結果最後都為null。

不止是算數運算,在字元是否相等的比較中,有null的參與也是不一樣的。

select case when 'abcd'=null then 1 else 0 end num from dual;
select case when 'abcd'<>null then 1 else 0 end num from dual;
select case when 'abcd'>null then 1 else 0 end num from dual;
select case when 'abcd'<null then 1 else 0 end num from dual;

如上,當一個字串與null作比較時,無論是等於,不等於,大於還是小於。其結果都是不成立的。後輸出的值都是0。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2911372/,如需轉載,請註明出處,否則將追究法律責任。

相關文章