当前位置: 移动技术网 > IT编程>数据库>Oracle > Oracle用decode函数或CASE-WHEN实现自定义排序

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

2020年06月14日  | 移动技术网IT编程  | 我要评论

0543团购,国际金银实时行情,东莞虚拟主机

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用decode函数或case-when实现自定义排序的文章就介绍到这了,更多相关oracle用decode函数或case-when实现自定义排序内容请搜索移动技术网以前的文章或继续浏览下面的相关文章希望大家以后多多支持移动技术网!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网