我有如下的hive表列值。
"112312452343"
我想在每两个字符后添加一个分隔符,如“:“(即冒号)。我希望输出为:第十一章二十三章十二章四十五章二十三章四十三是否有任何hive字符串操作函数支持来实现上述输出?
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})在它之前((?<= )),连接数组和删除结尾的分隔符(:$):
\\G
\\d{2}
(?<= )
:$
select regexp_replace(concat_ws(':',split(str,'(?<=\\G\\d{2})')),':$','') from (select "112312452343" as str)s
如果它不仅可以包含数字,请使用点(.)代替\\d:
.
\\d
regexp_replace(concat_ws(':',split(str,'(?<=\\G..)')),':$','')
3bygqnnd2#
如果您熟悉regex & lookahead,这实际上非常简单。每两个字符替换一个字符,用它们本身+ ':'替换第一个
2条答案
按热度按时间5sxhfpxr1#
对于固定长度,这将很好地工作:
结果:
另一个解决方案,将动态长度字符串工作。拆分字符串的空字符串,有最后一个匹配(
\\G
)后面的两个数字(\\d{2}
)在它之前((?<= )
),连接数组和删除结尾的分隔符(:$
):结果:
如果它不仅可以包含数字,请使用点(
.
)代替\\d
:3bygqnnd2#
如果您熟悉regex & lookahead,这实际上非常简单。
每两个字符替换一个字符,用它们本身+ ':'替换
第一个