oracle null 和 空串 ''
2015-02-09 15:41
309 查看
**********************nvl
Oracle中的空字符串基本上是被当成空NULL来处理的
selectnvl('','NULL') from dual 返回'NULL'
select 1 from dual where '' is null 返回1。
如果我们在往数据表里插数据的时候,把某个值赋成空串(''),而查询条件加入了诸如col_x= ''等条件的话,结果是无法查出来的。
反过来,在使用||连接符时,NULL值又被当作空串来使用。
select null || 'ce'|| null ||'shi' from dual将返回串’ceshi’。
然而,空串''与空值NULL还是有些区别的
select 1 from dualwhere '' = null; 返回0行
select 1 from dualwhere null = ''; 返回0行
select 1 from dualwhere '' is null; 返回1行 结果为:1
select 1 from dualwhere null is ''; 报错缺失null关键字
declare a varchar(10);
b varchar(10);
c varchar(10);
begin
a := '';
b := null;
c := a;
dbms_output.put_line(a);
dbms_output.put_line(b);
if (a is null) then
dbms_output.put_line('yes') ;
else dbms_output.put_line('no') ;
end if;
if (b is null) then
dbms_output.put_line('yes') ;
else dbms_output.put_line('no') ;
end if;
if (c is null) then
dbms_output.put_line('yes') ;
else dbms_output.put_line('no') ;
end if;
-- if (nvl(a,'@') = nvl(c,'@')) then
if (a = c) then
dbms_output.put_line('yes') ;
else dbms_output.put_line('no') ;
end if;
dbms_output.put_line(c) ;
end;
结果为:yes yes yes no
“if (a = c) then”=替换为< 或> 结果不变
注释处替换后为yes yes yes yes
也就是说因为oracle认为空串就是null 所以赋值后,abc都是null但是由于null不参与任何=,<,> 运算。所以都是no。想做比较必须处理。(nvl只是其中一种)
Oracle中的空字符串基本上是被当成空NULL来处理的
selectnvl('','NULL') from dual 返回'NULL'
select 1 from dual where '' is null 返回1。
如果我们在往数据表里插数据的时候,把某个值赋成空串(''),而查询条件加入了诸如col_x= ''等条件的话,结果是无法查出来的。
反过来,在使用||连接符时,NULL值又被当作空串来使用。
select null || 'ce'|| null ||'shi' from dual将返回串’ceshi’。
然而,空串''与空值NULL还是有些区别的
select 1 from dualwhere '' = null; 返回0行
select 1 from dualwhere null = ''; 返回0行
select 1 from dualwhere '' is null; 返回1行 结果为:1
select 1 from dualwhere null is ''; 报错缺失null关键字
declare a varchar(10);
b varchar(10);
c varchar(10);
begin
a := '';
b := null;
c := a;
dbms_output.put_line(a);
dbms_output.put_line(b);
if (a is null) then
dbms_output.put_line('yes') ;
else dbms_output.put_line('no') ;
end if;
if (b is null) then
dbms_output.put_line('yes') ;
else dbms_output.put_line('no') ;
end if;
if (c is null) then
dbms_output.put_line('yes') ;
else dbms_output.put_line('no') ;
end if;
-- if (nvl(a,'@') = nvl(c,'@')) then
if (a = c) then
dbms_output.put_line('yes') ;
else dbms_output.put_line('no') ;
end if;
dbms_output.put_line(c) ;
end;
结果为:yes yes yes no
“if (a = c) then”=替换为< 或> 结果不变
注释处替换后为yes yes yes yes
也就是说因为oracle认为空串就是null 所以赋值后,abc都是null但是由于null不参与任何=,<,> 运算。所以都是no。想做比较必须处理。(nvl只是其中一种)
相关文章推荐
- Oracle中的空串与NULL
- Oracle空串与null的处理
- oracle的死穴,空串当空值null
- Oracle空串与null的处理
- oracle、sqlserver数据库排序空值null问题解决办法
- Oracle中的null详解
- MSSQL Oracle MySQL 中NULL的替换
- oracle空值null的漫谈
- Oracle中null的使用详解
- oracle中null与''的区别
- oracle 关于null和除法的一些现象
- 关于Oracle中有null参与的逻辑或,逻辑与的操作结果
- Oracle 数据库唯一约束中的NULL的处理
- Oracle,sql server的空值(null)判断
- MS Server和Oracle中对NULL处理的一些细节差异
- 【Attention】Oracle查询时值为NULL的问题
- oracle、sqlserver数据库排序空值null问题解决办法
- oracle与sql server中NULL的识别方式的异同
- Oracle中Null与空字符串''''的区别
- MS Server和Oracle中对NULL处理的一些细节差异