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。

