在配置单元中排除最少6位数字并替换尾随数字 [英] Exclude Minimum 6 Digits and Replace Trailing digits In Hive

查看:0
本文介绍了在配置单元中排除最少6位数字并替换尾随数字的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人能帮我在蜂窝里写下下面的逻辑吗? 我在列中有一个值,其中我的数字尾随0。我需要将所有这些0替换为9,同时将0替换为9,同时我还需要考虑在9之前至少应该有6位数字,否则需要排除一些0,这样在9之前可以至少有6位数字。PFB某些情况。

  1. 1234506600000000000

在这里,我们可以看到尾随0之前的位数是8(12345066),所以我只需要将0除以9,输出将如下所示。1234506699999999999。

  1. 1234500000000000000

在这里,我在尾随0之前只有5位数字,因此我需要将第6位的0也视为数字,并且需要在将0替换为9时排除它,以便输出将是1234509999999999999。

  1. 1000000000000000000

在这里,我在尾随0之前只有1位数字,因此我需要排除5个额外的0,并需要将剩余的0替换为9,因此最终输出将类似于1000009999999999999。

 Input                        Output

1234506600000000000        1234506699999999999
1234500000000000000        1234509999999999999
1000000000000000000        1000009999999999999

推荐答案

如果您想从the other question修改LeftJoin的技术,我们可以将正则表达式调整为匹配至少6位数字,包括0

with mytable as (
select '1234560000000' as input union all
select '123450000000' union all
select '12340000000' union all
select '1230000000'   
)

select lpad(concat(splitted[0], translate(splitted[1],'0','9')),13,0)
from
(
select split(regexp_replace(input,'(\d{6,}?)(0+)$','$1|$2'),'\|') splitted
  from mytable
)s

如果您想要执行我提出的替换/填充/替换路线,您需要在调整后检查数字的长度,如果小于6,则用零将其填充为6。如果字符串长度超过6个字符,RPAD的大多数实现都会砍掉6个字符--如果不是这样,那么在rtrim之后调用rPad会更好更简单。如果配置单元的RPAD执行子字符串操作,则可能值得创建您自己的RPAD函数,使字符串的长度不超过N

这篇关于在配置单元中排除最少6位数字并替换尾随数字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆