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

来源:这里教程网 时间:2026-03-03 17:46:40 作者:
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。

相关推荐