我正在尝试生成一个hive查询,它将获取多个数字列名称并检查它是否具有数值。如果列具有数值,则输出应为(列名,true)否则如果字段为NULL或某个字符串值,则输出应为(列名,false)
SELECT distinct (test_nr1,test_nr2) FROM test.abc WHERE (test_nr1,test_nr2) not like '%[^0-9]%';
SELECT distinct test_nr1,test_nr2 from test.abc limit 2;
test_nr1 test_nr2
NULL 81432269
NULL 88868060
the desired output should be :
test_nr1 false
test_nr2 true
由于test_nr1是十进制字段并且它具有NULL值,因此它应该输出false。
欣赏有价值的建议。
答案 0 :(得分:2)
您可以使用cast
功能。当值无法转换为数字时,它返回NULL
。
例如:
select case when cast('23ccc' as double) is null then false else true end as IsNumber;
答案 1 :(得分:0)
您在这里尝试使用字符类模式匹配语法,并且它在每个SQL实现IIRC中都不起作用,但是,正则表达式匹配适用于大多数(如果不是全部)SQL实现。
考虑到您正在使用配置单元,应该这样做:
SELECT ('test_nr1', test_nr1 RLIKE '\d'), ('test_nr2', test_nr2 RLIKE '\d') FROM test.abc;
你应该记住,SQL中的regexp匹配非常慢。