Oracle 实现排序时将空值排在最后面
在做项目时需要对表中的数据,根据时间先后倒序排序,但是发现排序后,为空值的数据排在最前面,然后再按照时间先后排序。
select rownum as rown,
t1.*
from (
select work.*
from
(
select
w.person ,
w.begin_date_ as mydate,
to_char(w.begin_date_ ,'yyyy"."mm') ||'-'||to_char(w.end_date_ ,'yyyy"."mm') ||' ' || w.dept_name_ || ' ' || w.post_name_ as gzjl
from HR_POST_WORK w
where w.person = '006AC6D690C34437B4E7E8FB2F8B519F'
union all
select
t.person,
t.start_date_ as mydate,
to_char(t.start_date_ ,'yyyy"."mm') ||'-'||to_char(t.end_date_ ,'yyyy"."mm') ||' ' || t1.name || ' ' || t.unit_ || ' ' || t.sort_ as pxjl
from HR_POST_TRAIN t
left join FM_CODE_PUB t1 on t1.CODE_DEFINE = 'HR_TRAIN_LB' and t1.CODE = t.type_
where t.PERSON = '006AC6D690C34437B4E7E8FB2F8B519F'
) work
order by work.mydate DESC
)t1
数据库执行结果为: 查找资料发现,在排序语句后面加上"NULLS LAST"即可实现空值排在最后。修改语句如下:
order by work.mydate DESC NULLS LAST
执行结果如下。
正序也是同样的原理。
order by work.mydate ASC NULLS LAST
结果如下: 再查资料发现(原文链接),Oracle中, NULLS FIRST:指定NULL值应该在非NULL值之前返回。 NULLS LAST:指定NULL值应该在非NULL值之后返回。
|