服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > 数据库技术 > Oracle技术 > Oracle开发 > 查看文档

oracle数据库中关于"null"排序的问题

问题:在处理一般的数据记录中,对于数字类型的字段,在oracle的排序中,默认把null值做为大于任何数字的类型,当然对于varchar2类型的字段,默认也是该处理方式,但是客户要求排序的过程中,需要把null的字段默认排在前边(从小-->大)。一般的order by xxxx,无法解决。

问题解决:

示例如下:

select * from 

(select a.*,rownum as my_sys_rownum from ( 

select deptid,nvl(bdzname,' '),nvl(vollevel,'0'),zbrl,nvl (zbts, '0'), 

nvl(fzr,'0'),nvl(deptiddes,' '),nvl(tel,' '),nvl(runstatedes,' '), 

nvl(address,' '),bdzid from v_bdz where rownum<2000 

and zbrl is null 

) a 
union 

select b.*,rownum+(select count(*) from ( 

select deptid,nvl(bdzname,' '),nvl(vollevel,'0'),zbrl,nvl(zbts, '0'), 

nvl(fzr,'0'),nvl(deptiddes,' '),nvl(tel,' '),nvl (runstatedes,' '), 

nvl(address,' '),bdzid from v_bdz where rownum<2000 

and zbrl is null 

)) as my_sys_rownum from ( 

select deptid,nvl(bdzname,' '),nvl(vollevel,'0'),zbrl, 

nvl(zbts, '0'),nvl(fzr,'0'), 

nvl(deptiddes,' '),nvl(tel,' '),nvl(runstatedes,' '), 

nvl(address,' '),bdzid from v_bdz where rownum<2000 

and zbrl is not null order by zbrl 

) b 

) 

order by my_sys_rownum desc

扫描关注微信公众号