在配置单元中排除最少6位数字并替换尾随数字数字、单元中

2023-09-03 09:14:47 作者:想念不停息

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

1234506600000000000

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

1234500000000000000 0 1 2 3 4 5 6 7 8 9 1 7 5 3 9 8 6 4 1 9 在esl把上面数字对应替换在表格里怎么操作

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

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