利用sql进行排序

编辑
文档创建者:axing (73248 )     浏览次数:1657次     编辑次数:1次     

目录:

1.问题描述编辑

在对数据进行展示之前,如果没有对数据进行排序,会使数据看起来一片混乱,不能清晰地看到各数据之间的关系。而排序,也有各种各样的需求,如按时间排序,按数字排序,按中文排序等,如果我们只会使用使用设计器的高级排序扩展后排序,将无法满足各种特殊的排序需求。

2.解决方案编辑

通过sql直接在数据库中排序,这样不仅性能最佳,而且各数据库对各种特殊的排序需求也比较支持,这里以Oracle为例

3.示例编辑

3.1简单的升序、降序

使用asc进行升序排序,如select * from table order by id asc     注:asc可以省略,默认为升序

使用desc进行降序排序,如select * from table order by id desc 

3.2空值排序

如果我们想要排序后空值永远在前面可以使用nulls first,如:

222
同理如果想要空值永远排在后面可以使用nulls last,如:

222

3.3随机排序

如果想要查询出来的数据在每次展示的时候,展示顺序各不相同,则可以使用随机排序:

select * from emp order by dbms_random.value()

3.4中文排序

中文的排序默认是以ASCII码来排序的,由于ASCII码排序与拼音排序大部分相同,常常导致人们误以为默认根据拼音来排序,为了证明这点,我特意创造了个繁体字:

order by name 等同于 order by ascii(name)

222
按拼音排序可以使用 order by nlssort(name, 'NLS_SORT=SCHINESE_PINYIN_M')

222
按部首排序可以使用 order by nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M')

222
按笔画排序可以使用order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M')

222

3.5自定义排序

使用instr( )函数来自定义:

222
使用decode( )函数来自定义:

222
使用case when..then...来自定义(不推荐):

222

4.备注编辑

以上是我整理的一些排序需求 ,可能还不完善。如果大家还有哪些需求是我没有提到的,欢迎在留言里提出来。

附件列表


主题: 专题总结
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

此页面有帮助吗?