Hive Sql空值陷阱——空值、NULL、不等于判断问题

有次使用hive查询数据时,在对字段进行条件过滤时,遇到了一个问题。

是这样的,表中有个字段数据类型为string,里面存放的值有数字,null(空值),‘’(空串),在对字段进行条件过滤时,结果并不是我期望的。

现在进行简单地总结下:

数据准备:

create table test.tb_user as 
select '1' as user_id,
       'aikaifa' as user_name
union all 
select '2' as user_id,
       '小爱' as user_name
union all 
select '3' as user_id,
       null as user_name 
union all 
select '4' as user_id,
       '' as user_name

查询结果:

c4863a481b7171da1a27c8392cb73ffe.jpeg

筛选姓名不为‘小爱’

如果我们查询sql这样写

select * from test.tb_user where user_name <>'小爱'

执行结果

0b947c5f7306946ba18ebd062e331f18.jpeg

细心的你,会发现查询结果只有两条记录,id为3的那条记录没有筛选出来,要知道,user_name 为null 符合条件啊,怎么就没有筛选到呢。

select * from test.tb_user where user_name <>'小爱'

通过这种方式会漏了为null的数据,需要对null进行单独的操作。

select * from test.tb_user where user_name <>'小爱' or user_name is null

筛选null

select * from test.tb_user  where user_name is null

67a0cf06504276524b04ba5f1708f9e8.png

筛选空字符串

select * from test.tb_user where length(user_name)=0;

6291765a649dcc0a02fb7ac33fbbb339.png

总结

<> 想要查询时,需要针对为null做特殊处理

'' 表示的是字段不为null且为空字符串,此时用 a is null 是无法查询这种值的,必须通过 a='' 或者 length(a)=0 查询

往期推荐

公司要求一旦怀孕自动离职,想想也挺无奈的,也只能苦笑

程序员后悔考编到事业单位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值