如何检查配置单元中的第一个非空值
例如
选择('',5)应为5
选择(5,'')应为5
选择('',NULL)应为NULL
选择('','')应该得到''
请帮助,我知道合并将适用于查找第一个非null值。
答案 0 :(得分:1)
将NULL
转换为字符串'NULL'
,空为NULL
并使用coalesce
,然后再转换回来。像这样:
create temporary macro empty2null(s string)
case when s='' then null
when s is null then 'NULL'
else s
end;
create temporary macro NULL2empty (s string)
case when s='NULL' then null
when s is null then ''
else s
end;
select NULL2empty(coalesce(empty2null(''),empty2null(5)));
唯一的不便之处是,您必须将每一列都包装到empty2null()
中,除了5
之类的常量外,它只是用于检查
测试:
hive> create temporary macro empty2null(s string)
> case when s='' then null
> when s is null then 'NULL'
> else s
> end;
OK
Time taken: 0.97 seconds
hive>
> create temporary macro NULL2empty (s string)
> case when s='NULL' then null
> when s is null then ''
> else s
> end;
OK
Time taken: 0.02 seconds
hive>
> select NULL2empty(coalesce(empty2null(''),empty2null(5)));
OK
5
Time taken: 7.08 seconds, Fetched: 1 row(s)
hive> select NULL2empty(coalesce(empty2null(''),empty2null('')));
OK
Time taken: 3.96 seconds, Fetched: 1 row(s)
hive> select NULL2empty(coalesce(empty2null(''),empty2null(null)));
OK
NULL
Time taken: 0.952 seconds, Fetched: 1 row(s)
hive> select NULL2empty(coalesce(empty2null(5),empty2null('')));
OK
5
Time taken: 0.067 seconds, Fetched: 1 row(s)