【SQL相关】Hive中空值与Null的判断及处理

1.空值与null的区别

        null没有被分配任何值或对象,表示这个字段没有被赋值或者值是未知的,占空间,不会被count()函数统计;

        空值表示这个字段被赋了一个空的值,不占空间,会被count()函数统计。

2.空值与null的判断

        null和''(空值)在SQL中的筛选过滤条件是不一样的,is null 识别不了 '',同样地,'' 也识别不了 null 。

2.1 null判断

--筛选null
select * from table where a is null
--筛选非null
select * from table where a is not null

2.2 空值判断

--筛选空值
select * from table where a = ''
--筛选非空值
select * from table where a <> ''

--或者

--筛选空值
select * from table where length(a) = 0
--筛选非空值
select * from table where length(a) <> 0

2.3 null与空值判断

--筛选null与空值
select * from table where a is null and a = ''
--筛选非null与非空值
select * from table where a is not null and a <> ''

--或者

--筛选null与空值
select * from table where nvl(a,'') = ''
--筛选非null与非空值
select * from table where nvl(a,'') <> ''

3.空值与null的处理

3.1 null处理

nvl函数

nvl(expr1,expr2)

例如:nvl(a,0)

如果a字段值为null,那么null转化为0这个值,如果a字段值不为null,则显示a本来的值。

拓展--nvl2(expr1,expr2,expr3)

例如:nvl2(a,0,1)

如果a字段值为null,那么null转化为0这个值,如果a字段值不为null,则转化为1这个值。

3.2 空值处理

        hive本身没有replace函数,可以用translate和regexp_replace函数代替。

translate(expr1,expr2,expr3)

例如:translate(a,'',0)

将a字段的空值替换为0

regexp_replace(expr1,正则表达式,expr2)

例如:regexp_replace(a,"[\\s]+|[\u3000]+",0)

将a字段的空值替换为1([\\s]+|[\u3000]+是正则)


        对于null的处理其实也可以使用translate和regexp_replace函数。

translate(a,null,0)

regexp_replace(nvl(a,""),"[\\s]+|[\u3000]+",0)

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

24岁的cielo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值