Null的处理

编辑
  • 文档创建者:zsh331
  • 浏览次数:3835次
  • 编辑次数:5次
  • 最近更新:Kevin-s 于 2019-06-18
  • 1. 描述

    我们在建立数据集时,有时候可以会在原表基础上对字段进行加减乘除的运算,此时如果遇到字段中有 Null 或 0 值的情况,我们该怎么处理呢?


    2. 思路

    可以对 Null 或 0 值通过数据库表达式进行转换再运算。


    3. 示例

    3.1 示例(null 值运算)

    当在做二个字段做运算的时候,只要字段中有 null,这时发现语句并不会报错,但是这种结果并不是我们想要的结果。这是因为数据库很多数据库(如oracle)与 null 进行运算结果为 null,所以此时我们就需要对 null 进行转换了。

    准备数据

    cp  price    numb
      苹果  80  20
      橘子  35  
      菠萝  45  0
      香蕉  24  
      西瓜  60  15

    1)SQL Server 数据库--使用 isnull()函数

    SELECT cp, price, numb, price * isnull(numb, 1) AS priceb FROM test_c; --isnull(numb, 1) 当 numb 的值为空值时,就返回 1


    2)Oracle 数据库-使用 nvl() 函数

    select cp, price, numb, price * nvl(numb, 1) as priceb from test_c;

     --nvl(numb, 1) 当 numb 的值为空值时,就返回 1

    3)MySQL 数据库-使用 Coalesce() 函数

    SELECT cp, price, numb, price * coalesce(numb, 1) AS priceb FROM test_c; -- coalesce(numb, 1) 当 numb 的值为空值时,就返回 1


    3.2 示例(0 值运算)

    当我们在做数据集 SQL 运算的时候,可能会遇见字段相除的情况,这个时候可要注意,分母不能为 0,例:(sqlserver)

    SELECT cp, price, numb, price /numb AS priceb FROM test_c;

    会报如下错误

    [SQL]SELECT cp, price, numb, price /numb AS priceb FROM test_c [Err] 22012 - [SQL Server]遇到以零作除数错误。

    如果遇到分母为0 的情况,我们可采用sqlserver的nullif()函数,Oracle 的decode()函数等等

    以 SQL Server 为例--nullif()函数

    nullif(expression,expression):如果两个指定的表达式相等,则返回 null。

    SELECT cp, price, numb, price /nullif(numb,0) FROM test_c; --price/nullif(numb,0) 解释:当 numb = 0 时,nullif()函数返回为 null,任何值与 null 运算都为 null


    附件列表


    主题: 报表应用
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]