加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Oracle中空值null排序问题的处理

(2016-03-15 17:11:47)
标签:

null排序处理

sql中null排序处理

oracle中null排序问题

null排序问题

分类: Oracle数据库
      在Oracle数据库数据处理的SQL语句中,当表的排序列中含有null或者''时,缺省Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前。
      如果你没有对null或''做处理时,这时做降序排序时,就会发现null或''是排在最前位的;做升序排序时,会发现null或''是排在最后位的。针对以上情况,我们该如何处理呢?下面简绍几种处理方式,以供大家参考。

一、创建测试表
drop table t_test;
create table t_test(
tid integer
);

--添加测试数据
insert all  
into t_test values('')
into t_test values(null)
into t_test values(12)
into t_test values(100)
select * from dual;
commit;


二、处理方法 
1、使用nulls first 或 nulls last 语法
nulls first和nulls last是Oracle Order by支持的语法, 
如果order by 中指定了表达式Nulls first,则表示null值的记录将排在最前(不管是asc 还是 desc) 
如果order by 中指定了表达式Nulls last,则表示null值的记录将排在最后(不管是asc 还是 desc) 
测试情况如下:
select * from t_test order by tid asc nulls first; 
Oracle中空值null排序问题的处理

select * from t_test order by tid desc nulls first; 
Oracle中空值null排序问题的处理

select * from t_test order by tid  nulls last;
Oracle中空值null排序问题的处理

select * from t_test order by tid desc nulls last;
Oracle中空值null排序问题的处理


2、使用nvl函数 
nvl函数可以将输入参数为空时转换为指定值,如: 
nvl(tid,1)
表示当tid为空时则返回1,如果不为空则返回tid,通过这个函数可以定制null的排序位置。 
 
3、使用decode函数 
decode函数比nvl函数更强大,同样它也可以将输入参数为空时转换为一指定的值,如:
decode(tid,null,1,tid)
表示当tid为空时则返回1,如果不为空则返回tid,通过这个函数可以定制null的排序位置。 
 
4、使用case when 语法 
case语法是Oracle 9i后开始支持的,是一个比较灵活的语法,同样在排序中也可以应用 
如:  
select * 
from t_test
order by (case when tid is null then 1 else tid end);
 
表示当tid为空时则返回1,如果不为空则返回tid,通过case语法同样可以定制null的排序位置。 

5、将列中的null或''更新处理后,再排序处理
update t_test set tid=1 
where tid is null;
commit;
select * from t_test order by tid desc;

6、将列中的null或''通过筛选条件过滤处理后,再排序处理
select * from t_test where tid is not null order by tid desc;



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有