欢迎来到站长天空!

其它数据库

当前位置: 主页 > 数据库 > 其它数据库

Oracle用decode函数或CASE-WHEN实现自定义排序

时间:2025-12-23 15:00:02|栏目:其它数据库|点击:

1 问题

SQL排序,只要在order by后面加字段就可以了,可以通过加descasc来选择降序或升序。但排序规则是默认的,数字、时间、字符串等都有自己默认的排序规则。有时候需要按自己的想法来排序,而不是按字段默认排序规则。

比如字段值为英文字段:MondayTuesdayWednesday等,如果按字段默认排序规则就为:

Friday
Monday
Saturday
Sunday
Thursday
Tuesday
Wednesday

实际我需要的是:

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

2 decode函数

通过decode函数可以实现,如下:

select * from table_date
order by 
decode(DateStr,
  'Monday',1
  'Tuesday',2
  'Wednesday',3
  'Thursday',4
  'Friday',5
  'Saturday',6
  'Sunday',7,
  0);

后面的数字可以不连续。

3 case when语句

另外,还可以用case when来实现:

select * from table_date
order by (CASE DateStr
  WHEN 'Monday' then 1
  WHEN 'Tuesday' then 2
  WHEN 'Wednesday' then 3
  WHEN 'Thursday' then 4
  WHEN 'Friday' then 5
  WHEN 'Saturday' then 6
  WHEN 'Sunday' then 7
   ELSE 0
   END);

4 总结

当然,把字段直接赋值为对应的数字效率会高很多,通过另外一张表再建立映射关系。

上一篇:oracle基本查询操作子查询用法实例分析

栏    目:其它数据库

下一篇:Windows10安装Oracle19c数据库详细记录(图文详解)

本文标题:Oracle用decode函数或CASE-WHEN实现自定义排序

本文地址:https://zz.feitang.co/shujuku/32933.html

广告投放 | 联系我们 | 版权申明

申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:257218569 | 邮箱:257218569@qq.com

Copyright © 2018-2026 站长天空 版权所有 Powered by EyouCms冀ICP备14023439号