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处理方法相关推荐

  1. PostgreSQL 9.6.0 手册

    搜索 PostgreSQL 9.6.0 手册 PostgreSQL 全球开发组 翻译:彭煜玮, 瀚高软件及其他贡献者 版权 © 1996-2016 The PostgreSQL Global Deve ...

  2. C#3.0扩展方法[转]

    C#3.0扩展方法是给现有类型添加一个方法.现在类型既可是基本数据类型(如int,String等),也可以是自己定义的类. //Demo--1 //扩展基本类型 namespace TestExten ...

  3. IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法

    IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序"Extensionle ...

  4. php 4位数字不足补零,php实现数字不足补0的方法

    php实现数字不足补0的方法 发布时间:2020-08-28 09:51:06 来源:亿速云 阅读:100 作者:小新 这篇文章将为大家详细讲解有关php实现数字不足补0的方法,小编觉得挺实用的,因此 ...

  5. proe50安装方法64位_proe5.0安装方法64位

    内容来自用户:陈新宏 PROE5.0详细安装方法 PROE5.0安装方法 1:先安装虚拟光驱; . 2.然后e68a8462616964757a686964616f31333433646431用虚拟光 ...

  6. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0. zfill()方法语法: ...

  7. php的setinc方法,thinkphp3.2.0 setInc方法 源码全面解析

    搜索热词 我们先来看一下setInc的官方示例: 需要一个字段和一个自增的值(默认为1) 我们通过下面这个例子来一步步分析他的底层是怎么实现的: class TestController extend ...

  8. 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 ...

  9. 安装office2010出现了错误,提示要安装MSXML6.10.1129.0解决方法

    安装office2010出现了错误,提示要安装MSXML6.10.1129.0解决方法 参考文章: (1)安装office2010出现了错误,提示要安装MSXML6.10.1129.0解决方法 (2) ...

最新文章

  1. AI的阿基里斯之踵:模糊性
  2. GCJ 2009 Round1C C Bribe the Prisoners
  3. 连接没反应_显示器USB接口的作用是什么?为什么会没有反应?
  4. Plyr – 简单,灵活的 HTML5 媒体播放器
  5. 利用jquery getJSON 调用ashx实现ajax调用
  6. ffmpeg to webm
  7. html 应用绝对定位 居中,html – 如何居中绝对定位的项目
  8. webpack(一)
  9. 从时间中提取年月(MySQL中extract函数用法)
  10. html制作跑马灯,html跑马灯制作
  11. python编程星期几_python如何获取星期几
  12. 一名菜鸟程序员的跳槽经历以及其所感所想(二)
  13. LaTex 论文排版(2): 插入公式 (从MathType公式编辑器导入到LaTex中)
  14. php微信支付接口开发的实现程序
  15. 精进1-职业价值 by采铜
  16. 使用Ultra Librarian生成Cadence Allegro的PCB封装库和OrCAD Capture CIS的原理图库
  17. SEO分析和方案设计
  18. BIOS 和 EFI 启动光盘制作
  19. blos禁止计算机休眠,HP EliteBook 和 ProBook 笔记本电脑 - 升级 BIOS 后,计算机可能无法进入待机或休眠状态...
  20. 强大的web电子表格控件dhtmlxSpreadsheet免费下载地址

热门文章

  1. 2021年科技园区规划设计方案
  2. 【实用教程】网页视频下载
  3. 使用mp4v2封装mp4
  4. 矩阵的乘法口诀(二)
  5. 解决U盘空间足够,储存是却是文件过大
  6. 分享五年码农生涯历程经验及2018总结 | 掘金年度征文
  7. 2015 macbook air换第三方SSD(西数SN750)
  8. jconsole本地连接失败
  9. jconsole连接远程服务
  10. 中国 省级 单位 的 字母 简称 和 字母 排列 顺序