oracle数据库中的排序设置
oracle数据库中的排序设置
orale中的排序最基本的order by desc或asc大家应该都比较熟悉,那么其他的排序方式,比如中文的按拼音排序,按笔画排序,或者想自定义排序都有什么方法呢,下面介绍oracle数据库中排序的几种方式。
1.简单的升序、降序
使用 asc 进行升序排序,如
select * from table order by id asc; 注:asc 可以省略,默认为升序
使用 desc 进行降序排序,如
select * from table order by id desc;
2.空值排序
如果我们想要排序后空值永远在前面可以使用 nulls first,如:
select * from emp order by comm nulls first;
同理如果想要空值永远排在后面可以使用 nulls last,如:
select * from emp order by comm nulls last;
3.随机排序
如果想要查询出来的数据在每次展示的时候,展示顺序各不相同,则可以使用随机排序:
select * from emp order by dbms_random.value()
这样每次点击查询按钮的时候展示的内容顺序都是不同的。
4.中文排序
中文的排序默认是以 ASCII 码来排序的,由于 ASCII 码排序与拼音排序大部分相同,常常导致人们误以为默认根据拼音来排序,为了证明这点,创造个繁体字查看排序是否影响:
order by name 等同于 order by ascii(name)
with test as (select '劉备' as name from dual union all
select '曹操' as name from dual union all
select '孙权' as name from dual)
select * from test order by name;
可以看到如果按拼音排序的话,刘备的拼音首字母是L,排序应该在曹操C的后边,但是并不是这样,所以我们要清楚,中文的默认排序是按照ASCII 码来排序的。
4.1 按拼音排序可以使用语句:
order by nlssort(name, 'NLS_SORT=SCHINESE_PINYIN_M')
可以看到结果是正常按照拼音进行排序的。下面还有几种中文的排序方式。
4.2 按部首排序可以使用
order by nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M')
4.3 按笔画排序可以使用
order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M')
5.自定义排序
5.1 使用 instr( ) 函数来自定义:
order by instr('自定义顺序',列名);
表示对列中的内容按自定义的内容顺序进行排序,使用到的原理是通过instr字符判断函数,判断列中的内容在自定义内容中的位置号,内容位于自定义前边的,数字就小一些,最终通过转化后的位置号进行排序。
5.2使用 decode( ) 函数来自定义:
order by decode(列名,内容1,1,内容2,2,内容3,3,...)
表示对列按内容1,内容2,内容3…的顺序排序。使用到的原理是通过decode条件返回函数,对各个内容分别转化为数字,最后按转化后的数字顺序排序。
5.3 使用 case when…then…来自定义(不推荐):
order by case when 列=内容1 then 1
when 列=内容2 then 2
when 列=内容3 then 3
... end
表示对列按内容1,内容2,内容3…的顺序排序。使用到的原理与decode相似,通过case when条件返回函数,对各个内容分别转化为数字,最后按转化后的数字顺序排序。
oracle数据库中的排序设置相关教程