设为首页 收藏本站
查看: 980|回复: 0

[经验分享] oracle 查询结果对空值的排序

[复制链接]

尚未签到

发表于 2018-9-26 10:36:46 | 显示全部楼层 |阅读模式
  oracle 对查询结果进行排序时,被排序的栏位存在null值,且要指定NULL值排在最前面或者最后面,本文将介绍如何处理oracle 空值排序,需要的朋友可以参考下:
  适用情况:
  oracle 对查询结果进行排序时,被排序的栏位存在null值,且要指定NULL值排在最前面或者最后面
  关键字:Nulls First;Nulls Last
  默认情况:null 默认为最大值(即:asc 升序大>,null值排在最后;desc 降序小>,null值排在最前面)
  指定:
  1.Oracle Order by支持的语法
  2.指定Nulls first 则表示null值的记录将排在最前(不管是asc 还是desc)
  3.指定Nulls last 则表示null值的记录将排在最后(不管是asc 还是desc)
  语法举例:(Table:Tab_A 有部分空值的栏位Col_A)
  select * from Tab_A order by Tab_A. Col_A (asc/desc) nulls first------>null 值排在最前面
  select * from Tab_A order by Tab_A. Col_A (asc/desc) nulls last ------>null 值排在最后面
  其他方法:
  在order by 的时候,用Nvl、NVL2 、Decode、case .....when....end;等函数对栏位的null值进行处理
  例如:select * from Tab_A order by NVL(Tab_A. Col_A,'abc' ) (asc/desc);
  对于Nvl()函数
  如果是空值就替换成另一个值如nvl(字段,‘x’)字段值等于null就这个函数得到的结果就是'x',一般用于存在空值比较的情况下,比如字段a与字段b都是int型,其中一个等于null另一个为非空值,你使用ab是不成立的,
  使用此条件查询你将丢失这条本来不相等的数据,可以如此用法nvl(字段,-1)nvl(字段,-1),这样就可以得到想要查询的数据,当然查询数据的前提是此字段值不能有-1值才能用这种写法。
  对于NVL2函数
  NVL2(expr1,expr2,expr3)   
  功能:如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。NVL( string1, replace_with) 功能:如果string1为NULL,则
  NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。
  以下为网上搜到的实际例子的另一种处理方式:
  问题描述:
  在处理一般的数据记录中,对于数字类型的字段,在oracle的排序中,默认把null值做为
  大于任何数字的类型,当然对于varchar2类型的字段,默认也是该处理方式,但是客户
  要求排序的过程中,需要把null的字段默认排在前边(从小-->大)。一般的
  order by xxxx,无法解决。
  问题解决:
  方案1:
  可以使用复杂的使用sql:
  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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-602246-1-1.html 上篇帖子: Oracle expdp和impdp自动使用resumable特性 下篇帖子: ORACLE 11G 中表空间传输 TransportableTablespace
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表