Oracle——复杂排序以及排序分页后可能出现的问题

阅读: 评论:0

Oracle——复杂排序以及排序分页后可能出现的问题

Oracle——复杂排序以及排序分页后可能出现的问题

文章目录

  • 前言
  • 按照汉字首字母排序nlssort(xxx,'NLS_SORT=SCHINESE_PINYIN_M')
  • 按照汉字笔画排序nlssort(xxx,'NLS_SORT=SCHINESE_STROKE_M')
  • 按照汉字部首排序nlssort(xxx,'NLS_SORT=SCHINESE_RADICAL_M')
  • 扩充排序
    • decode 转换后排序
  • 排序中的空值问题
    • 排序将空值放前面(nulls first)
    • 排序将空值放尾部(nulls first)
  • 关于排序后分页处理数据不正确问题

前言

相信很多人看到文章这个标题,心里第一个想法就是:

排序不就是order by xxx就可以了嘛,这有啥好写的?

虽然排序的确是使用order by进行排序,但是在Oracle中存在其他很好玩的一些东西,特写博客做记录。

按照汉字首字母排序nlssort(xxx,‘NLS_SORT=SCHINESE_PINYIN_M’)

比如说有个需求:

查询到的数据结果集,按照银行首字母正序排序

那么伪SQL可以这么写:

select * from xxx t order by nlssort(t.bank_name,'NLS_SORT=SCHINESE_PINYIN_M')

按照汉字笔画排序nlssort(xxx,‘NLS_SORT=SCHINESE_STROKE_M’)

比如有个需求:

查询到的数据结果集,按照银行汉字笔画正序排序

那么伪SQL可以写成这样:

select * from xxx t order by nlssort(t.bank_name,'NLS_SORT=SCHINESE_STROKE_M')

按照汉字部首排序nlssort(xxx,‘NLS_SORT=SCHINESE_RADICAL_M’)

比如有个需求:

查询到的数据结果集,按照银行汉字部首正序排序

那么伪SQL可以写成这样:

select * from xxx t order by nlssort(t.bank_name,'NLS_SORT=SCHINESE_RADICAL_M')

扩充排序

decode 转换后排序

除了上面采取nlssort进行恶心操作排序之外,还能使用deocde()进行排序。
比如下面的这个需求:

币种按照首字母正序排序,但是人民币必须排第一

那么实现方式也很好玩,可以先维护一个配置表或者虚拟表,将币种信息进行配置,然后采取如下方式排序:

SELECT * FROM DM_PARA_CONFIG dpc WHERE PARA_CODE=200030 
ORDER BY nlssort( decode(para_val,'人民币','aaaaa'),'NLS_SORT=SCHINESE_PINYIN_M')

思路很新奇:

人民币转化为aaaaaa,然后拼音排序,也就是 汉字首字母排序

排序中的空值问题

排序将空值放前面(nulls first)

select * from xxx t
order by t.bank_name nulls first

排序将空值放尾部(nulls first)

select * from xxx t
order by t.bank_name  nulls first

关于排序后分页处理数据不正确问题

SQL中的排序,需要讲究一个唯一顺序性,当在排序和分页操作时,若排序的字段不存在唯一性标识,则分页后,可能导致出现在第N页的数据,出现在了N+1页中的情况。

解决上述的排序问题也很简单:

增加新的排序字段,尽量靠近唯一的属性列,
如果数据库表中不存在唯一的列,则需要不断的去找,保证排序后数据记录顺序的唯一性。

本文发布于:2024-01-29 16:02:29,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170651534916440.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:分页   可能出现   Oracle
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23