PostgreSQL被除数为0处理方法
0不能作为被除数这是数学中的常识,当在数据库中除以0时,应该如何处理呢?
在oracle和pg中是不允许被除数为0的。
oracle:
SQL> select 1/0 from dual;
select 1/0 from dual*
ERROR at line 1:
ORA-01476: divisor is equal to zero
PostgreSQL:
bill@bill=>\set VERBOSITY verbose
bill@bill=>select 1/0;
ERROR: 22012: division by zero
LOCATION: int4div, int.c:824
我们可以在pg的代码中看到该报错的解释:
813 Datum814 int4div(PG_FUNCTION_ARGS)815 {816 int32 arg1 = PG_GETARG_INT32(0);817 int32 arg2 = PG_GETARG_INT32(1);818 int32 result;819 820 if (arg2 == 0)821 {822 ereport(ERROR,823 (errcode(ERRCODE_DIVISION_BY_ZERO),824 errmsg("division by zero")));825 /* ensure compiler realizes we mustn't reach the division (gcc bug) */826 PG_RETURN_NULL();827 }
但是,如果业务要求当被除数=0时,像mysql中一样返回空,而不是报错,在pg中该如何实现呢?
mysql:
mysql> select 1/0;
+------+
| 1/0 |
+------+
| NULL |
+------+
1 row in set, 1 warning (0.03 sec)
pg中对应的处理方法:
–方法一:
使用case语法
bill@bill=>select case when c2=0 then null else c1/c2 end from t2;case
------21
(3 rows)
–方法二:
自定义操作符
bill@bill=>create or replace function div_zero(numeric, numeric) returns numeric as $$
bill$# select case when $2 <> 0 then $1/$2 else null end ;
bill$# $$ language sql strict immutable;
CREATE FUNCTIONbill@bill=>create operator // (procedure=div_zero, leftarg=numeric, rightarg=numeric);
CREATE OPERATORbill@bill=>select 1//0; ?column?
----------(1 row)
PostgreSQL被除数为0处理方法相关推荐
- PostgreSQL 9.6.0 手册
搜索 PostgreSQL 9.6.0 手册 PostgreSQL 全球开发组 翻译:彭煜玮, 瀚高软件及其他贡献者 版权 © 1996-2016 The PostgreSQL Global Deve ...
- C#3.0扩展方法[转]
C#3.0扩展方法是给现有类型添加一个方法.现在类型既可是基本数据类型(如int,String等),也可以是自己定义的类. //Demo--1 //扩展基本类型 namespace TestExten ...
- IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法
IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序"Extensionle ...
- php 4位数字不足补零,php实现数字不足补0的方法
php实现数字不足补0的方法 发布时间:2020-08-28 09:51:06 来源:亿速云 阅读:100 作者:小新 这篇文章将为大家详细讲解有关php实现数字不足补0的方法,小编觉得挺实用的,因此 ...
- proe50安装方法64位_proe5.0安装方法64位
内容来自用户:陈新宏 PROE5.0详细安装方法 PROE5.0安装方法 1:先安装虚拟光驱; . 2.然后e68a8462616964757a686964616f31333433646431用虚拟光 ...
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0. zfill()方法语法: ...
- php的setinc方法,thinkphp3.2.0 setInc方法 源码全面解析
搜索热词 我们先来看一下setInc的官方示例: 需要一个字段和一个自增的值(默认为1) 我们通过下面这个例子来一步步分析他的底层是怎么实现的: class TestController extend ...
- linux 安装nodejs8,CentOS 安装NodeJS V8.0.0的方法
下载nodejs 解压 tar -xvf node-v8.0.0-Linux-x64.tar.xz 测试是否安装成功 进入解压目录下的 bin 目录,执行 ls 命令 cd node-v8.0.0-l ...
- 安装office2010出现了错误,提示要安装MSXML6.10.1129.0解决方法
安装office2010出现了错误,提示要安装MSXML6.10.1129.0解决方法 参考文章: (1)安装office2010出现了错误,提示要安装MSXML6.10.1129.0解决方法 (2) ...
最新文章
- AI的阿基里斯之踵:模糊性
- GCJ 2009 Round1C C Bribe the Prisoners
- 连接没反应_显示器USB接口的作用是什么?为什么会没有反应?
- Plyr – 简单,灵活的 HTML5 媒体播放器
- 利用jquery getJSON 调用ashx实现ajax调用
- ffmpeg to webm
- html 应用绝对定位 居中,html – 如何居中绝对定位的项目
- webpack(一)
- 从时间中提取年月(MySQL中extract函数用法)
- html制作跑马灯,html跑马灯制作
- python编程星期几_python如何获取星期几
- 一名菜鸟程序员的跳槽经历以及其所感所想(二)
- LaTex 论文排版(2): 插入公式 (从MathType公式编辑器导入到LaTex中)
- php微信支付接口开发的实现程序
- 精进1-职业价值 by采铜
- 使用Ultra Librarian生成Cadence Allegro的PCB封装库和OrCAD Capture CIS的原理图库
- SEO分析和方案设计
- BIOS 和 EFI 启动光盘制作
- blos禁止计算机休眠,HP EliteBook 和 ProBook 笔记本电脑 - 升级 BIOS 后,计算机可能无法进入待机或休眠状态...
- 强大的web电子表格控件dhtmlxSpreadsheet免费下载地址