oracle,hive,mysql对null值的不同处理方式,以及各自的函数

Oracle 处理null值

  1. Nvl(expr1,expr2) -> expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致,如果不一致会存在隐式转换,不能转换时会报错;转换规则如下:
    (1)如果参数1为字符型,则把参数2转换为参数1的类型,返回值为 VARCHAR2
    (2)如果参数1为数值型,则判断两个参数的最高数值优先级(如双精实数比单 精实 数优先级高),然后转换成高优先级的数值,返回该类型的值.

  2. nvl2(expr1, expr2, expr3)-> expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型,如果转换不了就会报错;

  3. coalesce(expression,value1,value2……,valuen) ->
    如果expression不为空值则返回expression;否则判断value1是否是空值,
    如果value1不为空值则返回value1;否则判断value2是否是空值,
    如果value2不为空值则返回value2;……以此类推,
    如果所有的表达式都为空值,则返回NULL

Hive处理null值

  1. Nvl(value,default)->value不是null就直接返回,是null就返回默认值;
  2. Coalesce(a1,a2,a3…an) ->a1不是null就返回a1,否则判断a2,以此类推
    要求所有表达式必须是相同类型,或者可以隐式转换为相同的类型;
  3. NullIF(a,b)->如果a=b就返回null,否则就返回a;开始支持的版本是2.3.0;

需要额外注意的是:

  1. Hive里表在底层如何存储和标识null,是可以由参数控制的,比如
    (1) alter table name SET SERDEPROPERTIES(‘serialization.null.format’ = ‘\N’)
    底层保存的是‘\N‘,通过查询显示的是’NULL‘
    (2) alter tablename SET SERDEPROPERTIES(‘serialization.null.format’ = ‘NULL’)
    底层保存的是‘NULL‘,通过查询显示的是’NULL‘
  2. 空值‘‘
    表示的是空字符串,通过is null这种过滤语法是无法查询到的,必须是a=‘‘或者length(a)=0;
  3. 不同数据类型空值的处理
    存储:int和string数据类型的字段,存储null是默认会存为’\N’;但是在存储“”时,int类型还是存储为’\N’,string类型则会存储为“”;
    在查询时:int类型的字段可以用is null来进行判断,而对于string类型字段,isnull过滤的是存储为\N的数据,条件=“”过滤出来的是“”空字符串数据;
  4. 使用小技巧
    ALTER TABLE b SET SERDEPROPERTIES (‘serialization.null.format’=‘’);
    让null和“”等价,null就会显示

Mysql处理null

  1. 函数:
    Isnull(a)->如果a是null,返回1,其他返回0;
    Ifnull(a,b)->如果a不是null,返回a,否则返回b;
    Nullif(a,b)->如果a=b,返回null,否则返回a;
    Coalesce(a,b,…)->返回参数里,第一个不为null的值;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值