在Spark-SQL中如何提取字母数字混合字符串的全部数字字符
Spark SQL提取混合串全部数字的实现方案
你当前使用的regexp_extract函数仅能返回第一个匹配的连续数字段,无法获取后续的数字内容。实现提取全串所有数字的最简方案如下:
方案1:正则替换(全版本兼容)
直接使用regexp_replace删除所有非数字字符即可得到所有数字的拼接结果:
spark.sql("select case when length(date) > 0 then regexp_replace(date, '[^0-9]', '') else '' end as date from input").show(false)
正则规则[^0-9]会匹配所有非数字字符,替换为空串后,输入1234avf456wef时输出结果为1234456,完全符合需求。
方案2:提取后拼接(Spark 3.1+版本支持)
如果需要先提取所有数字段再拼接,可以搭配regexp_extract_all和array_join实现:
spark.sql("select case when length(date) > 0 then array_join(regexp_extract_all(date, '\\d+'), '') else '' end as date from input").show(false)
内容的提问来源于stack exchange,提问作者Only developer
相关产品推荐
相关产品推荐

