我正在尝试生成一个配置单元查询,它将采用多个数字列名,并检查它是否具有数字值。如果列具有数字值,则输出应为(列名,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是一个十进制字段,并且它有空值,所以它应该输出false。
感谢有价值的建议。
2条答案
按热度按时间ctrmrzij1#
你可以用
cast
功能。它回来了NULL
当值不能转换为数字时。例如:
jutyujz02#
您尝试在这里使用字符类模式匹配语法,但并不是在每个sql实现iirc中都有效,然而,regexp匹配在大多数(如果不是全部)sql实现中都有效。
考虑到您正在使用hive,这应该可以做到:
不过,您应该记住,regexp匹配在sql中非常慢。