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

来源:脚本之家  责任编辑:小易  

DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值.其具体的语法格式如下:DECODE(input_value,value,result[,value,result…][,default_result]);其中:input_value 试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应result 是一组成序偶的结果值default_result 未能与任何一序偶匹配成功时,函数返回的默认值下面的例子说明了,如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。SELECT checkup_type,DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’)FROM checkup;www.zgxue.com防采集请勿采集本网。

1 问题

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

比如:语句select id,decode(id,1,'男',2,'女',3,'人妖')as\"性别\"from t2;表示:当id=1时,返回值男 当id=2时,返回值女 当id=3时,返回值人妖 具体步骤如下: create table t2(id varchar2(20))

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

DECODE不能实现条件转化 你的情况需要用CASE WHEN CASE WHEN 字段>=60 THEN '正常' ELSE '异常' END

Friday

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)

Monday

decode可以代替case when语句,在语句写法上可以节省很多coding的时间 但是执行效率上其实与case when是差不多的 oracle特有这个函数的更多是为了方便使用,而不是效率考虑

Saturday

select decode('苹果','苹果',1,'梨子',2,0)from dual;结果为:1 select decode('梨子','苹果',1,'梨子',2,0)from dual;结果为:2 select decode('橘子','苹果',1,'梨子',2,0)from dual;结果为:

Sunday

Thursday

Tuesday

Wednesday

实际我需要的是:

Monday

Tuesday

Wednesday

Thursday

Friday

Saturday

select decode('苹果','苹果',1,'梨子',2,0)from dual;结果为:1 select decode('梨子','苹果',1,'梨子',2,0)from dual;结果为:2 select decode('橘子','苹果',1,'梨子',2,0)from dual;结果为:

Sunday

2 decode函数

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

select * from table_dateorder 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_dateorder 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实现自定义排序内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

Oracle DECODE函数使用方法:1、比较大小select decode(sign(变量1-变量2),-1,变量1,变量2)from dual;取较小值sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1例如:变量1=10,变量2=20则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。2、此函数用在SQL语句中,功能介绍如下:Decode函数与一系列嵌套的 IF-THEN-ELSE语句相似。base_exp与compare1,compare2等等依次进行比较。如果base_exp和 第i 个compare项匹配,就返回第i 个对应的value。如果base_exp与任何的compare值都不匹配,则返回default。每个compare值顺次求值,如果发现一个匹配,则剩下的compare值(如果还有的话)就都不再求值。一个为NULL的base_exp被认为和NULL compare值等价。如果需要的话,每一个compare值都被转换成和第一个compare 值相同的数据类型,这个数据类型也是返回值的类型内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • oracle 中 decode 函数用法
  • oracle中decode函数的使用方法
  • 使用oracle的decode函数进行多值判断
  • mysql仿oracle的decode效果查询
  • oracle数据库中order by排序和查询按in条件的顺序输出
  • oracle中简单查询、限定查询、数据排序sql语句范例和详细注解
  • 数据库查询排序使用随机排序结果示例(oracle/mysql/ms sql server)
  • oracle使用order by排序null值如何处理
  • oracle如何查看impdp正在执行的内容
  • 探讨oracle中的&号问题
  • oracle常用分析函数与聚合函数的用法
  • oracle 临时表详解及实例
  • oracle ora-00031:session marked for kill(标记要终止的会话)
  • oracle 数组的学习 小知识也要积累,养成好的学习态度
  • 常用oracle分析函数大全
  • oracle sqlplus 常用命令大全
  • pl/sql developer连接64位的oracle图文教程
  • oracle 函数大全
  • Oracle DECODE函数的用法详解?
  • oracle中decode函数有什么用?
  • Oracle DECODE函数的用法详解?
  • oracle为什么我用decode函数
  • oracle decode函数的使用方法?
  • 关于Oracle的decode函数
  • 如何使用oracle的decode函数进行多值判断
  • oracle中decode函数如何提升查询语句性能的?
  • 如何使用Oracle的Decode函数进行多值判断
  • oracle数据库中decode的使用方法 要求使用的decode函数,在线等待!!!!
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页oracleoracle 中 decode 函数用法oracle中decode函数的使用方法使用oracle的decode函数进行多值判断mysql仿oracle的decode效果查询oracle数据库中order by排序和查询按in条件的顺序输出oracle中简单查询、限定查询、数据排序sql语句范例和详细注解数据库查询排序使用随机排序结果示例(oracle/mysql/ms sql server)oracle使用order by排序null值如何处理oracle如何查看impdp正在执行的内容探讨oracle中的&号问题oracle常用分析函数与聚合函数的用法oracle 临时表详解及实例oracle ora-00031:session marked for kill(标记要终止的会话)oracle 数组的学习 小知识也要积累,养成好的学习态度常用oracle分析函数大全oracle sqlplus 常用命令大全pl/sql developer连接64位的oracle图文教程oracle 函数大全oracle 查看表空间的大小及使用情linux系统(x64)安装oracle11g完oracle数据库下载及安装图文操作oracle存储过程基本语法介绍oracle 10g 安装教程[图文]oracle 如何查询被锁定表及如何解基于ora-12170 tns 连接超时解决oracle数据库tns配置方法详解oracle中to_date详细用法示例(ororacle 创建表空间详细介绍通过sql准确查出一天数据的方法oracle计算时间差常用函数sql – oracle中匿名table/varray类型示例oracle date如何比较大小分析oracle插入字符串数据时字符串中有""单引oracle学习笔记(六)oracle生成单据编号存储过程的实例代码[oracle] 如何使用触发器实现ip限制用户登oracle更新xml节点问题的一些细节详解oracle 日期格式(总结)
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved