ITPub博客

首页 > 数据库 > Oracle > Oracle的null和空串【一切有为法,如梦幻泡影 】

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

原创 Oracle 作者:哎呀我的天呐 时间:2022-08-22 10:00:25 1 删除 编辑
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博客 ” ,链接:https://blog.itpub.net/29990276/viewspace-2911372/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
https://cloud.tencent.com/developer/inventory/14362

注册时间:2014-10-30

  • 博文量
    403
  • 访问量
    2528861