有人可以帮助/建议我如何处理下面的情况在 hive 。
我有一个列,其中包含一些值,其中我有0的一些数字后(6位数后),我需要取代所有这些0的9。如果我有0的5位数后,然后我需要包括0的开始,然后再次需要取代0的6位数后。PFB一些样本记录和预期输出。
Input output
1234560000000 1234569999999
123450000000 0123459999999
12340000000 0012349999999
1230000000 0001239999999
所以这里基本上我需要从右到左检查,即1234560000000这里我将从右(0)开始检查,并且一旦找到任何数字,我将用9替换所有的0,并且如果除0之外的数字计数小于6,则将在开始处添加0。
恳请
2条答案
按热度按时间nnvyjq4y1#
将字符串拆分为两部分:最后的数字和其他所有数字,用9替换零,并连接。
演示:
测试结果
f87krz0w2#
我从未使用过hive,但它看起来拥有我在其他数据库中会使用的所有函数
我们把所有的0转换成空格,把右边的空格转换成
rtrim
,把rpad
加上“9”转换成原来的长度,然后把lpad
一直转换到13加上“0”,然后把replace
任何空格(在中间,例如,如果我们把101010000转换成000101019999)转换回“0”,这样怎么样?如前所述,我从来没有使用过hive,所以这里可能有一些小的语法问题需要解决--例如,如果hive没有通过自动将数字转换为字符串来给予你一个数字的长度,你就需要插入一些东西来进行显式转换。你也可以对数字进行log 10转换。
我不知道有任何小提琴网站提供Hive作为测试..