我有一个变量用作free-txt字段,数千行。
虽然它应该只包含帐号,但它也包含电话号码,文本或NULL。
我只需要提取包含帐号(8位数字段)的列。 我如何在SQL impala中存档它,特别是因为我们不仅有数字,还有文本。 此外,我需要知道帐号与其他帐号的百分比,以估算修复其他字段所需的时间。 如何才能做到这一点? 它看起来像这样:
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
答案 0 :(得分:0)
正则表达式对此有好处。尝试:
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
您可能需要将计数转换为浮点数,以使除法起作用。
答案 1 :(得分:0)
有趣。我会使用regexp_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;