【发布时间】:2019-08-08 22:16:40
【问题描述】:
我需要使用 regex_extract 从列中的字符串中提取数字。我在外部表上使用 Impala。
我已经检查过正则表达式,为了测试它,我还使用了 regexp_like 和 regexp_replace。他们俩都工作得非常完美。
这里是查询:
select
sucursal,
regexp_like(sucursal,'^[0-9]{1,3}') as match,
regexp_extract(sucursal,'^[0-9]{1,3}',1) as CodSucusal,
regexp_replace(sucursal,'^[0-9]{1,3}','lala') as RepCodSucusal
from jdv.stg_devoluciones limit 5;
结果如下:
+-------------------+-------+------------+--------------------+
| sucursal | match | codsucusal | repcodsucusal |
+-------------------+-------+------------+--------------------+
| 124 NAVOJOA | true | | lala NAVOJOA |
| 73 BOCA DEL RIO | true | | lala BOCA DEL RIO |
| 964 JIUTEPEC | true | | lala JIUTEPEC |
| 456 TEQUISQUIAPAN | true | | lala TEQUISQUIAPAN |
| 212 LANDIN | true | | lala LANDIN |
+-------------------+-------+------------+--------------------+
codsucursal 应该是 sucursal 编号,但 regexp_extract 正在返回 null 而不是
预期结果:
+-------------------+-------+------------+--------------------+
| sucursal | match | codsucusal | repcodsucusal |
+-------------------+-------+------------+--------------------+
| 124 NAVOJOA | true | 124 | lala NAVOJOA |
| 73 BOCA DEL RIO | true | 73 | lala BOCA DEL RIO |
| 964 JIUTEPEC | true | 964 | lala JIUTEPEC |
| 456 TEQUISQUIAPAN | true | 456 | lala TEQUISQUIAPAN |
| 212 LANDIN | true | 212 | lala LANDIN |
+-------------------+-------+------------+--------------------+
我做错了什么?
【问题讨论】:
-
不应该是
regexp_extract(sucursal,'^[0-9]{1,3}', 0) as CodSucusal吗?索引必须是0。 -
谢谢,但我已经尝试过了。在 impala 中,您需要三个参数。最后一个是正则表达式组的索引,如果匹配很多,则需要提取。
-
那么,你试过
0吗? -
天才。那工作简直太完美了!谢谢