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

标签:
null排序处理sql中null排序处理oracle中null排序问题null排序问题 |
分类: Oracle数据库 |
一、创建测试表
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;
select * from t_test order by tid desc nulls
first;
select * from t_test order by tid nulls
last;
select * from t_test order by tid desc nulls last;
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;