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( ) 函数【mysql中为field()函数】来自定义:

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条件返回函数,对各个内容分别转化为数字,最后按转化后的数字顺序排序。
在这里插入图片描述

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值