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

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 总结

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

到此这篇关于Oracle用decode函数或CASE-WHEN实现自定义排序的文章就介绍到这了,更多相关Oracle用decode函数或CASE-WHEN实现自定义排序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2020-05-16

ORDER BY非稳定的排序 提一个问题: oracle在order by 排序时,是稳定排序算法吗? 发现用一个type进行排序后,做分页查询,第一页的数据和第二页的数据有重复 怀疑是order by 时,两次排列的顺序不一致 看到业务描述的问题可以得到的结论order by排序不稳定,还有第一个印象就是,type肯定是不唯一的,并且没有索引吧. 这里先科普下排序的稳定性,举个最简单的例子,1,2,3,1,4,5 排序 排序的结果是1,1,2,3,4,5,这时候观察这个1,如果第一个1还是排序

Decode函数的语法结构如下: 复制代码 代码如下: decode (expression, search_1, result_1)decode (expression, search_1, result_1, search_2, result_2)decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n) decode (expression, search_1, result_1

含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: 复制代码 代码如下: IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IFdecode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3当

以下代码在MYSQL中测试通过,MSSQL应该能跑通,未测试. 复制代码 代码如下: #创建表如下 create temporary table tmp (a int, b int ,c int); insert into tmp VALUES (1,10,1),(10,10,2),(10,100,2); #mysql执行 select sum(case when c = '1' then A else B end) from tmp #oracle执行 select sum(decode(c,

含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THEN RETURN(翻译值2) ...... ELSIF 条件=值n THEN RETURN(翻译值n) ELSE RETURN(缺省值) END IF decode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3  当然值1

适用情况: oracle 对查询结果进行排序时,被排序的栏位存在null值,且要指定NULL值排在最前面或者最后面 关键字:Nulls First:Nulls Last 默认情况:null 默认为最大值(即:asc 升序大>,null值排在最后:desc 降序小>,null值排在最前面) 指定: 1.Oracle Order by支持的语法 2.指定Nulls first 则表示null值的记录将排在最前(不管是asc 还是desc) 3.指定Nul

Oracle查询结果集,随机排序 复制代码 代码如下: select * from table1 order by dbms_random.value(); MySQL随机查询出一条记录: 复制代码 代码如下: -- 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT 1 来查询 SELECT * FROM table1 WHERE id=(SELECT id FROM table1 ORDER BY rand() LIMIT 1

一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言. Oracle数据库之所以发展的很好,主要也是因为Oracle是全世界最早采用SQL语句的数据库产品. SQL功能强大,概括起来,它可以分成以下几组: 复制代码 代码如下: DML(Data Manipulation Language) 数据操作语言,用于

查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的SQL, b.machine 计算机名 FROM v$process a, v$session b, v$sqlarea c WHERE a.addr = b.paddr AND b.sql_hash_value = c.hash_value 其它网友给出的正

注意:对 rownum(伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据 例:查询工资前20名的员工姓名,工资 ,工资由高到低 Select rownum,first_name,salary from (Select first_name, salary from employees Group by salary desc) Where rownum=<20 如果直接按如下查询得下图结果,显然不正确的,rownum(伪列) 是按查询顺序来排列的

复制数据库表中两个字段数据的SQL语句 今天为表新添加一个字段,但又想与表中的另一个字段值相同,由于数据过多想通过sql语句实现,经测试下面的这句话确实很好用. 复制代码 代码如下: update jb51_temp set B=A jb51_temp 代表表明 A是有数值的字段,B是新添加的字段 ,记住空值表放到前面,如果set a=b,那么你的数值都为空了,就麻烦了,建议操作前备份数据库. 如何将一个字段里的值复制添加到另一个字段中 比如,有二个字段A和B,A字段是值是"我",B字

sql 查出一张表中重复的所有记录数据 1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2.查询出所有数据进行分组之后,和重复数据的重复次数的查询数据,先列下: select count(username) as '重复次数',username from xi group

在用docker创建mysql容器的时,有时候我们期望容器启动后数据库和表已经自动建好,初始化数据也已自动录入,也就是说容器启动后我们就能直接连上容器中的数据库,使用其中的数据了. 其实mysql的官方镜像是支持这个能力的,在容器启动的时候自动执行指定的sql脚本或者shell脚本,我们一起来看看mysql官方镜像的Dockerfile,如下图: 已经设定了ENTRYPOINT,里面会调用/entrypoint.sh这个脚本,我们把mysql:8这个镜像pull到本地,再用docker run启

在mysql中查询不区分大小写重复的数据,往往会用到子查询,并在子查询中使用upper函数来将条件转化为大写.如: 复制代码 代码如下: select * from staticcatalogue WHERE UPPER(Source) IN (SELECT UPPER(Source) FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))>1) ORDER BY upper(Source) DESC; 这条

insert into MICS_WorkPlan_RestDays select * from OPENROWSET('SQLOLEDB', 'SERVER=192.168.2.97;uid=用户名;pwd=密码;Database=数据库','select * from v_restdays(sql语句,可执行存储过程)') as a 此语句可用来将另一服务器中的数据插入到本数据库中的某一表内

通过status命令,查看Slow queries这一项,如果值长时间>0,说明有查询执行时间过长 复制代码 代码如下: 以下为引用的内容:mysql> status; -------------- mysql Ver 11.18 Distrib 3.23.58, for redhat-linux-gnu (i386) Connection id: 53 Current database: (null) Current user: root@localhost Current pager: s

MySQL数据库执行效率对程序的执行速度有很大的影响,有效的处理优化数据库是非常有用的.尤其是大量数据需要处理的时候. 1. 优化你的MySQL查询缓存 在MySQL服务器上进行查询,可以启用高速查询缓存.让数据库引擎在后台悄悄的处理是提高性能的最有效方法之一.当同一个查询被执行多次时,如果结果是从缓存中提取,那是相当快的. 但主要的问题是,它是那么容易被隐藏起来以至于我们大多数程序员会忽略它.在有些处理任务中,我们实际上是可以阻止查询缓存工作的. // query cache does NOT

先随机后排序的oracle,Oracle用decode函数或CASE-WHEN实现自定义排序相关推荐

  1. Oracle Decode()函数和CASE语句的比较

    Oracle Decode()函数和CASE语句都是我们经常用到的,那么它们的区别在哪里呢?下面就为您详细介绍Oracle Decode()函数和CASE语句的区别,供您参考. 首先,举2个简单的例子 ...

  2. Mysql学习-group by with rollup 函数 和order by field()自定义排序函数

    今天看到同事的代码,学习到了 group by with rollup 函数 和order by field()自定义排序函数 group by with rollup 函数 文章地址 https:/ ...

  3. oracle nvl函数3个参数,oracle中的函数介绍(一):nvl函数、decode函数、case when函数、sum函数...

    最近做项目接触到的oracle数据库比较多,经常用到里面的一些函数,以前的博客中也介绍过行转列和列转行,这次再简单给大家介绍几个: nvl() NVL(a,b)就是判断a是否是NULL,如果不是返回a ...

  4. mysql自定义两个条件排序_使用MySQL中的两个不同列进行自定义排序?

    为此,将ORDER BY子句与CASE语句一起使用.让我们首先创建一个表-mysql> create table DemoTable1610 -> ( -> Marks int, - ...

  5. oracle乱码函数,jfinal oracle操作时decode函数填值乱码 求助什么原因????

    ![输入图片说明](https://git.oschina.net/uploads/images/2017/0527/151633_3e7d8cc4_403754.png "在这里输入图片标 ...

  6. oracle中decode函数详细解释,oracle中的decode函数

    decode函数能够实现逻辑的if--else选择判断,但是只能进行等值判断,就像switch--case. 基本语法格式如下:DECODE(col/expression , search1 , re ...

  7. oracle怎么自定义排序,ORACLE自定义顺序排序

    ORACLE可以借助DECODE函数,自定义顺序排序: select * from ( select 'Nick' as item from dual union all select 'Viki' ...

  8. JAVA集合四:比较器--类自定义排序

    参考链接: HOW2J.CN 前言 对于JAVA集合,都能够用集合的工具类Collections 提供的方法: Collections.sort(List list) Collections.sort ...

  9. C++中sort排序之自定义排序cmp(入门)

    咳咳,第一次写这种博客,介绍一下sort的自定义排序cmp函数: sort和cmp的实现需要的头文件有: #include<algorithm> using namespace std; ...

  10. PostgreSQL自定义排序

    业务场景:查询时将指定类型的表数据排在最前或最后,并根据多个字段排序 思路:使用 case when 语句自定义排序规则,该语句也可用于数据替换 自定义排序: SELECTid,type,county ...

最新文章

  1. Registry Release Traces 版本功能迭代和 issue bugfix
  2. 数据结构: 排序算法介绍
  3. python 字典的值可以为集合吗_转:Python字典与集合操作总结
  4. cojs 香蕉 解题报告
  5. Java8 拼接字符串 StringJoiner
  6. 恭喜了!5 月逼自己学下这项技能,年薪 35 万起
  7. Express-router
  8. 在系统二进制文件中检测到错误_门禁管理系统施工中常见的布线错误
  9. Android系统(23)---Android 应用分屏
  10. QT QTableWidget设置单元格不可编辑
  11. roboguide程序导出_FANUC ROBOGUIDE下载-FANUC ROBOGUIDE(发那科机器人编程软件)下载v9.1-西西软件下载...
  12. 网络信息系统安全的发展演变
  13. cpuz测试分数天梯图_cpubenchmark(2020电脑cpu性能天梯图)
  14. 你们公司用的 Maven 私服就是这么搭建的,头条抖音后端技术3面
  15. 阿里云服务器远程桌面安装
  16. 一、RAID磁盘阵列介绍
  17. 遥感的几何校正、正射校正、辐射校正
  18. ios 学习之 NSPredicate 模糊、精确、查询
  19. 你的爬虫会送你进监狱吗?
  20. 【转】Photoshop保存格式介绍大全

热门文章

  1. 连接php的作用是什么,什么是超链接,有什么作用
  2. Ensembl数据库下载参考基因组(植物拟南芥)
  3. mysql里条件语句和循环语句_MySQL与Oracle 差异比较之四条件循环语句
  4. 【建站系列教程】4、还不知道SEO你就OUT了
  5. 【Keras】The added layer must be an instance of class Layer.
  6. LeetCode 829. Consecutive Numbers Sum--笔试题--C++解法
  7. ubuntu安装pip3
  8. java随机产生100个大小写字母_Java生成固定长度的随机字符串(以大小写字母和数字)...
  9. 98年建模a题论文_2019年第九届APMCM亚太地区大学生数学建模竞赛 A 题(中英版)...
  10. macos nginx php mysql_mac环境下搭建nginx + php + mysql开发环境