impala sql只选择特定长度的数字
我有一个用作免费txt字段的变量,数千行长 虽然它应该只包含帐号,但也包含电话号码、文本或NULL 我只需要提取带有帐号(8位字段)的列。 我如何在SQLImpala中归档这些内容,尤其是我们不仅有数字,还有文本。 我还需要知道帐号与其他帐号的百分比,以估计修复其他字段所需的时间。 如何做到这一点? 它看起来像这样:impala sql只选择特定长度的数字,sql,cloudera,impala,Sql,Cloudera,Impala,我有一个用作免费txt字段的变量,数千行长 虽然它应该只包含帐号,但也包含电话号码、文本或NULL 我只需要提取带有帐号(8位字段)的列。 我如何在SQLImpala中归档这些内容,尤其是我们不仅有数字,还有文本。 我还需要知道帐号与其他帐号的百分比,以估计修复其他字段所需的时间。 如何做到这一点? 它看起来像这样: accounts --------- 12345678 23456789 test only 34567890 23443256 23443257 021735547 234432
accounts
---------
12345678
23456789
test only
34567890
23443256
23443257
021735547
23443258
23443259
23443260
call back
23443261
53443262
23443263
23443264
23443265
cancel
53443262
53443263
63443264
53443265
73443266
53443267
正则表达式适用于此。尝试:
select regexp_extract(free_text_column, '^[0-9]{8}$',1) from your_table
为了得到你能做的事
select count(regexp_extract(free_text_column, '^[0-9]{8}$',1))/count(*)
from your_table
您可能需要将计数转换为浮点数,以使除法生效。有趣。我会使用
regexp\u like()
:
select sum(case when regexp_like(col, '^[0-9]{8}$') then 1 else 0 end) as cnt,
avg(case when regexp_like(col, '^[0-9]{8}$') then 1.0 else 0 end) as ratio
from t;