Oracle 先判断是否为空,然后对非空数据做计算(DECODE比较大小)
需求
对某时间指标做分类,如果工单未完成(结束时间为空),则为“未结单”;否则,若工单超时,则为“未达标”;其余则为“达标”。
可见,指标结果分为3类:
未结单=COMPLETE_TIME IS NULL
达标=COMPLETE_TIME IS NOT NULL AND COMPLETE_TIME<=PLAN_FINISHED_TIME
未达标=COMPLETE_TIME IS NOT NULL AND COMPLETE_TIME>PLAN_FINISHED_TIME
数据
方法
首先,利用NVL2()函数,判断COMPLETE_TIME是否为空,为空则'未结单';
然后,利用DECODE()函数和SIGN()函数,判断差值是否大于0,大于0则为'未达标',否则为'达标'。
其中
- NVL2(表达式1,表达式2,表达式3)
3目表达式,如果'表达式1'为空,则返回'表达式3'的值;如果'表达式1'不为空,则返回'表达式2'的值。注意顺序与NVL()的区别。
- DECODE(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
多目表达式,此处只用到一种判断值,即DECODE(表达式,值,返回值,缺省值)。
如果,'表达式'等于'值',则返回'返回值',否则返回'缺省值'。
但是,DECODE只能判断是否相等,无法比较大小,可以与SIGN函数组合,实现比较大小的目的。
- SIGN(value)
SIGN(value)函数会根据value的值为0,正数,负数,分别返回0,1,-1
综上可见,通过sign对需要比较大小的式子做转换,得到0,1,-1后,即可以用decode来判断。
由于此场景只需要判断差值大于0还是小于等于0,共2种情况,所以按照下述方法可以实现目的。
SELECTSIGN(COMPLETE_TIME-PLAN_FINISHED_TIME) AS SIGN_FLAG,NVL2(COMPLETE_TIME, DECODE(SIGN(COMPLETE_TIME-PLAN_FINISHED_TIME), 1, '未达标', '达标'), '未结单') AS STATE
FROMPLAN
结果
Oracle 先判断是否为空,然后对非空数据做计算(DECODE比较大小)相关推荐
- 子串、真子串、非空子串、非空真子串的求解方法(数据结构)
** 字串.真子串.非空子串.非空真子串的求解方法 ** Eg:串S="software" 子串的求解方法 n(n+1)/2 +1 此处n为8,所以串S的子串为37 真子串的求解方 ...
- android非空验证,Android 非空格式验证框架
Validation的简介 这是一个简单的函数库,使用注释语法来验证用户输入的表单信息.你仅需编写几行代码就可以实现一些表单验证功能,且显示的所有视图都将反馈给用户.它还带有一个可扩展的在线验证选项, ...
- ajax登录非空判断,email ajax传输数据去重和非空判断(示例代码)
前台: ajax: $(document).ready(function(){ $("#email").blur(function(){ $("#email") ...
- Kotlin——初级篇(六):空类型、空安全、非空断言、类型转换等特性总结
在我们熟知的Java中,定义一个变量可以默认不赋值,因为Java的系统会给我们默认赋一个默认值,并且Java可定义一个赋值为null的变量,这样在使用这个变量的时候都会去显示判断该变量是否为null. ...
- 数据库将某个字段由可为空改为非空
delete from DM_MATERIAL where ELASTICITY is null; alter table DM_MATERIAL modify ELASTICITY not null ...
- oracle 表约束非空,oracle--约束(主键、非空、检查)
问题1:学号重复了,数据还可以插入成功 使用主键约束:学号是唯一标识一条数据的,所以必须唯一且不能为空 ---(1).在确定为主键的字段后添加 primary key关键字 ---(2).在创建表的后 ...
- 不是oracle约束的是,oracle--约束(主键、非空、检查)
- 问题1:学号重复了,数据还可以插入成功 使用主键约束:学号是唯一标识一条数据的,所以必须唯一且不能为空 -(1).在确定为主键的字段后添加 primary key关键字 -(2).在创建表的后面使 ...
- Kotlin如何避免“!!”(非空断言)
当我们把Java自动转成Kotlin的时候,代码里会出现很多非空断言!!.或者某些场景下因为IDE提示或编译错误,也让我们自己加上了一些!!. 但使用!!的后果是有可能抛出IllegalArgumen ...
- 【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)
文章目录 I . Kotlin 变量总结 II . Kotlin 非空变量 III . 非空变量不能赋空 IV . lateinit 关键字 V . lateinit 初始化判定 VI . Kotli ...
最新文章
- 【Java源码分析】Android-LruCache源码分析
- 清单革命:为什么不仅是工具革命?
- 在 VMware Clone Ubuntu Server 之后,解决网卡问题
- java安全编码指南之:lock和同步的正确使用
- Hazelcast入门指南第2部分
- SQL Server 空间监测
- 设计模式-观察者模式 发布/订阅模式
- Java模拟实现一个基于文本界面的《家庭记账软件》
- 如何从PDF文件中提取几页为一个PDF文件?
- 使用java,求100以内的质数(素数)
- Mybatis源码分析(一) JDBC Mybatis 简介
- 联邦学习数学公式纯手推
- 开心网创始人兼CEO程炳皓
- Sphinx 全文搜索引擎 介绍指南
- 扫码点餐小程序源码_做个扫码点餐的小程序贵吗?
- 中兴程序员坠楼事件:男人四十,人生半局
- CSS3毛玻璃的几种效果
- html编辑器贴吧,推荐HTML编辑器
- 应用为王 宝德获最佳国产云计算方案奖
- FMODE学习之-------第一站
热门文章
- Stream流(工厂的流水线)
- Nginx攻击防护、CC防护、防止SQL注入、防XSS的实践配置方法
- CSS学习之字体属性系列
- 微信实验四、公众号微博营销推广与比较
- emui4.0Android主题,华为全新系统EMUI4.0发布:基于安卓6.0!
- IntelliJ IDEA-Maven解决依赖冲突大全
- 9号服务器奔溃第二天网站首页被k,网站首页被k多长时间可以恢复?网站首页被k有哪些原因呢?...
- 2022年熔化焊接与热切割免费试题及熔化焊接与热切割考试总结
- 爱普生Epson SureColor T5280MFP 打印机驱动
- 区块链技术的主要特征有哪些