1 问题
对SQL排序,只要在order by后面加字段就可以了,可以通过加desc或asc来选择降序或升序。但排序规则是默认的,数字、时间、字符串等都有自己默认的排序规则。有时候需要按自己的想法来排序,而不是按字段默认排序规则。
比如字段值为英文字段:Monday、Tuesday、Wednesday等,如果按字段默认排序规则就为:
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 总结
当然,把字段直接html" target="_blank">赋值为对应的数字效率会高很多,通过另外一张表再建立映射关系。
到此这篇关于Oracle用decode函数或CASE-WHEN实现自定义排序的文章就介绍到这了,更多相关Oracle用decode函数或CASE-WHEN实现自定义排序内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍Oracle 中 decode 函数用法,包括了Oracle 中 decode 函数用法的使用技巧和注意事项,需要的朋友参考一下 含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3 当然值1,值2,值3也可以是表达式,这个
问题内容: 我的结构表如下: 我需要使用一条语句一次更新三行,以便第二列分别为5、3、2。 我使用以下查询,但似乎缺少一些内容 我的问题是这样吗?如果没有,我可以使用语句吗?或者我只能选择在一个语句中使用它来实现这一点? 请注意,这是为了 问题答案: 好吧,根据您给的小提琴,我尝试了这些,对我有用 我没有使用where条件
本文向大家介绍Oracle 自定义split 函数实例详解,包括了Oracle 自定义split 函数实例详解的使用技巧和注意事项,需要的朋友参考一下 Oracle 自定义split 函数 Oracle没有提供split函数,但可以自己建立一个函数实现此功能。比如“abc defg hijkl nmopqr stuvw xyz”,分隔符是空格,但空格个数不定。 源代码: 测试: 结
问题内容: 我正在处理大量旧数据(从平面文件db转换),其中字段的格式设置为输入记录的年份的最后2位,然后是4位的增量… 例如,1998年创建的第三条记录将为“ 980003”,而2004年创建的第十一条记录将为“ 040011”。 我无法更改这些值- 它们通过他们的公司存在,已经在州,客户等中注册。我知道将年份和其余年份分隔到单独的列中会很好,但这是不可能的。我什至不能真正做到“内部”,因为每一
本文向大家介绍javascript自定义in_array()函数实现方法,包括了javascript自定义in_array()函数实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript自定义in_array()函数实现方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的javascript程序设计有所帮助。
egghead.io 第9课: 自定义反应 when(debugName?, predicate: () => boolean, effect: () => void, scope?) when 观察并运行给定的 predicate,直到返回true。 一旦返回 true,给定的 effect 就会被执行,然后 autorunner(自动运行程序) 会被清理。 该函数返回一个清理器以提前取消自动运