Oracle中除数为0的两种解决办法(decode与nullif)
Oracle中Decode函数,语句DECODE(tag,''ZCGS'',0,1)=decode(''@corp-No@'',''6010'',1,0)
decode(字段或字段的运算,值1,值2,值3)
这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多
1.decode
利用decode函数: select decode(b,0,0,a/b) from dual;
1
当b = 0时,返回0,否则才返回a/b的结果。 2.nullif
先来说一下nullif的语法。 nullif(expr1,expr2)
1
如果两个参数相等,返回null,否则返回第一个。第一个参数不可指定为空。对于非数字类型参数,数据类型必须一致。对于数值数据类型,会隐式的转化为更高优先级的数据类型。(这个理解可能有误,我测试了int,integer,float。但是最终都转化为number类型)。 一般来说,我们处理“除数为零”的问题会用到decode(当然也可以用case,但是写起来代码更多些)。比如 dividend / decode(divisor, 0, null, divisor)
1
但是在除数divisor非常复杂的时候,就需要把这一大串代码写两遍,或者是再套一层view。无论是哪种,都是极其不利于维护的。 1 /
decode((sum(t.val) over(order by t.c) +
nvl(lead(val) over(partition by b order by c), 0)) /
sum(val) over(partition by b order by c),
0,
null,
(sum(t.val) over(order by t.c) +
nvl(lead(val) over(partition by b order by c), 0)) / sum(val)
over(partition by b order by c)) 对于这种复杂表达式的除数,每回修改都要改两遍,很容易出错。 利用nullif,可以让除数只写一次。
因为 decode(divisor, 0, null, divisor) 与 nullif(divisor, 0) 是等效的。
Oracle中除数为0的两种解决办法(decode与nullif)的更多相关文章
- [Android]Eclipse 安装 ADT[Android Development Tooling] 失败的两种解决办法
原因 最近想在新装的 Win7 里搭建一下 Android 的开发环境,虽然现在有 Android Studio 了,不过还是习惯 Eclipse 一点.众所周知的原因,Eclipse 直接安装 AD ...
- win10应用程序添加到开机启动项的两种解决办法
原文 win10应用程序添加到开机启动项的两种解决办法 在windows10系统中,如果想让应用程序在开机之后自动运行起来,可以怎么做呢? 方法一: 1.首先创建应用程序的快捷方式 找到自己想加入开机 ...
- Oracle中spool命令实现的两种方法比较
---恢复内容开始--- 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式.比如有如下表 SQL>; select id,username,password from myu ...
- Android开发之设置应用设置全屏的两种解决方法 兼容android5.0等两种解决方法
在开发中我们经常需要把我们的应用设置为全屏,有两种方法,一中是在代码中设置,另一种方法是在配置文件里改! 一.在代码中设置: 代码如下: package com.android.tutor; imp ...
- Linux下面使用命令如何运行.sh文件的两种解决办法
Linux下面用命令如何运行.sh文件的方法,有两种方法: 一.直接./加上文件名.sh,如运行hello.sh为./hello.sh[hello.sh必须有x权限] 二.直接sh 加上文件名.sh, ...
- Slave_SQL_Running:No的两种解决办法
进入slave服务器,运行: mysql> show slave status\G ....... Relay_Log_File: localhost-relay-bin. Relay_Log_ ...
- MySQL同步故障:" Slave_SQL_Running:No" 两种解决办法
进入slave服务器,运行: mysql> show slave status\G Relay_Log_File: localhost-relay-bin.000535 Relay_Log_Po ...
- Eclipse 配置spring boot pom.xml第1行报错的两种解决办法
现象 通过spring boot项目导入eclipse后,pom.xml文件的第一行总是报错.这里使用的spring版本是2.1.5,2.1.4以前的版本等其他版本的spring没有这个问题. 解决办 ...
- Oracle中新建数据表的两种方法
首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...
随机推荐
- arcgis性能检测记录
参考了一下文章,先记录下: http://www.mamicode.com/info-detail-1973690.html https://wenku.baidu.com/view/140c4880 ...
- Splay树求第k大模板
今天上午借着休息日得机会手撸了一下模板,终于对着模板调出来了.prev和next占用了std namespace里面的东西,然后报警我上次给关了所以.....就花了3个小时吧. inline加不加无所 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的layoutDirection属性
layoutDirection属性保存的是部件的布局方向,有三个取值: 在部件上设置布局方向时,它将传播到部件的子级,但不会传播到作为窗口的子级,也不会传播到已显式调用setLayoutDirecti ...
- PyQt(Python+Qt)学习随笔:formLayout的layoutFieldGrowthPolicy属性
Qt Designer的表单布局(formLayout)中,layoutFieldGrowthPolicy用于控制表单布局中输入部件大小的增长方式.如图: 该字段实际与QFormLayout类的Fie ...
- 谈谈传说中的redo log是什么?有啥用?
目录 一.引出 redo log 的作用 二.思考一个问题: 三.redo log block 四.redo log buffer 五.redo log的刷盘时机 六.推荐参数 七.redo log ...
- Monkey的使用
1.进入adb shell 环境 在Windows环境下进入DOS界面,输入adb shell 注意:adb shell服务使用的端口是5037,如果此端口被其他进程占用时,将不能正常启动adb sh ...
- [GKCTF2020]cve版签到
cve-2020-7066漏洞 利用get_header($url)函数漏洞%00对部分url截断 构造ssrf请求,用127.0.0.1网址访问目标主机内部资源 其实就是get_header()的C ...
- 上传到github
我是为了自己下次不用再找github上传的地方了,索性就复制了一篇 转载于 https://blog.csdn.net/m0_37725003/article/details/80904824 首先你 ...
- sails框架结合mocha的测试环境搭建
一.环境结构 1.首先最底层是操作系统 2.其次在操作系统之上是Node.js的运行环境,和Database 3.再之上就是sail和mocha框架 二.环境搭建 1.首先需要Node.js的运行环境 ...
- 支持“EFDBContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
在修改数据库表后会出现 支持"EFDBContext"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库 这个问题解决方法: 在Global.a ...