如何使用hive函数在字符串的每n个字符后添加分隔符?

qf9go6mv  于 2022-11-05  发布在  Hive
关注(0)|答案(2)|浏览(327)

我有如下的hive表列值。

"112312452343"

我想在每两个字符后添加一个分隔符,如“:“(即冒号)。
我希望输出为:
第十一章二十三章十二章四十五章二十三章四十三
是否有任何hive字符串操作函数支持来实现上述输出?

5sxhfpxr

5sxhfpxr1#

对于固定长度,这将很好地工作:

select regexp_replace(str, "(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1:$2:$3:$4:$5:$6")
from
(select "112312452343" as str)s

结果:

11:23:12:45:23:43

另一个解决方案,将动态长度字符串工作。拆分字符串的空字符串,有最后一个匹配(\\G)后面的两个数字(\\d{2})在它之前((?<= )),连接数组和删除结尾的分隔符(:$):

select regexp_replace(concat_ws(':',split(str,'(?<=\\G\\d{2})')),':$','')
from
(select "112312452343" as str)s

结果:

11:23:12:45:23:43

如果它不仅可以包含数字,请使用点(.)代替\\d

regexp_replace(concat_ws(':',split(str,'(?<=\\G..)')),':$','')
3bygqnnd

3bygqnnd2#

如果您熟悉regex & lookahead,这实际上非常简单。
每两个字符替换一个字符,用它们本身+ ':'替换
第一个

相关问题