【发布时间】:2023-03-23 19:21:01
【问题描述】:
我在 Hive 中有一个 19 个字符的字符串,我需要拆分并删除所有前导零。
示例:
7212092180052740029
我需要这样拆分
721 20 9218 00527 40029
因此在第 1、第 2 或第 3 部分中没有前导零,并且 00 将从第 4 部分中删除;第 5 节将被忽略。我想要的结果是
721209218527
我的第一次解决方案是
trim(concat_ws('', regexp_replace(substr(some_string, 1, 3), '^0*', '')
, regexp_replace(substr(some_string, 4, 2), '^0*', '')
, regexp_replace(substr(some_string, 6, 4), '^0*', '')
, regexp_replace(substr(some_string, 10, 5), '^0*', '')))
但这似乎太过分了。任何想法如何用一行正则表达式做到这一点?
另外,应该注意的是,在 5 个部分中的任何一个中,当拆分时,永远不会全为零(即第一个部分永远不会是 000);如果是这样,那么我的“解决方案”将不起作用,因为 all 零将是前导的,'^0* 将不返回任何内容。
【问题讨论】:
-
拆分的逻辑是什么
-
我认为从问题中可以看出这一点。 (3, 2, 4, 5, 5)
-
我现在无法检查,但你试过不使用正则表达式吗?也许为了删除前导零,将拆分的字符串转换为 int 然后再转换回字符串对您有用并且会更快。