今天使用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 查询结果:

如果我们查询sql这样写
select * from test.tb_user where user_name <>'小爱'执行结果

细心的你,会发现查询结果只有两条记录,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 nullselect * from test.tb_user where user_name is nullselect * from test.tb_user where length(user_name)=0;总结
<> 想要查询时,需要针对为null做特殊处理
'' 表明的是字段不为null且为空字符串,此时用 a is null 是无法查询这种值的,必须通过 a='' 或者 length(a)=0 查询
#360行闪光时刻#
¥74.50
pc中文游戏 人渣 steam SCUM 正版激活码scum 国区/全球激活码cdkey生存联机游戏
¥54.90
我的世界Java版WIN10基岩版正版游戏Minecraft微软激活码大师收藏版 PC电脑 官方礼品卡25位数字兑换码国际服
¥305.00
steam 街霸6 国区激活码CDKEY 秒发 街头霸王6 Street Fighter 6 街霸六PC游戏中文正版 秒发街机格斗游戏
¥74.50
steam SCUM 人渣steam 人渣scum人渣生存联机人渣key 人渣激活码 正版激活码scum 国区/全球激活码cdkey
¥305.00
Steam 街霸6 街头霸王6 国区激活码 Street Fighter 6 街霸六CDKey 街头霸王6豪华版中文PC正版游戏 街霸游戏
¥108.00
新版第二版Oxford Discover 原版正版教材1/2/3/4/5/6级 牛津少儿英语探索发现系列 英语科普系列含正版激活码oxforddiscover