配置单元-如何检查数字列是否有数字/小数?

hyrbngr7  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(438)

我正在尝试生成一个配置单元查询,它将采用多个数字列名,并检查它是否具有数字值。如果列具有数字值,则输出应为(列名,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。
感谢有价值的建议。

ctrmrzij

ctrmrzij1#

你可以用 cast 功能。它回来了 NULL 当值不能转换为数字时。
例如:

select case when cast('23ccc' as double) is null then false else true end as IsNumber;
jutyujz0

jutyujz02#

您尝试在这里使用字符类模式匹配语法,但并不是在每个sql实现iirc中都有效,然而,regexp匹配在大多数(如果不是全部)sql实现中都有效。
考虑到您正在使用hive,这应该可以做到:

SELECT ('test_nr1', test_nr1 RLIKE '\d'), ('test_nr2', test_nr2 RLIKE '\d') FROM test.abc;

不过,您应该记住,regexp匹配在sql中非常慢。

相关问题