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
|