SQL排序

楼主
我是社区第238588位番薯,欢迎点我头像关注我哦~
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,如:


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



3.3 随机排序

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

select * from emp order by dbms_random.value()


3.4 中文排序

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

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


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


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


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



3.5 自定义排序

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


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


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


编辑于 2020-9-11 15:10  
分享扩散:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表