替换 Oracle 中的最后 4 位数字

问题描述 投票:0回答:1

我有一些机密号码想要更换。 例如:

5712221479
6782236690

我想通过添加 1 位数字来替换最后四位数字。

5712222580
6782237701

就像下面这样:

0 becomes 1
1 becomes 2 
2 becomes 3 
3 becomes 4
4 becomes 5
5 becomes 6 
6 becomes 7 
7 becomes 8 
8 becomes 9
9 becomes 0

我对 Linux 服务器有这个逻辑。但这些数字都在oracle数据库里。不知道如何在那里使用它。

awk -F"|" -v OFS="|" '
NR>0 {                                                      
    for (i=2;i<3;i++) {                                   
        str = substr($i, 1, length($i) - 4)                 
        for (j = length($i) - 3; j <= length($i); j++) {    
            str = str (substr($i, j, 1) + 1) % 10           
        }
        $i = str                                            
    }
}
1'
regex oracle function replace substr
1个回答
0
投票

有很多方法可以做到这一点。这是一个。我使用 CHR/ASCII 来递增,以防万一您那里有非数字(如果您知道它们都是数字,您可以简单地

TO_NUMBER(digit)+1
代替):

SELECT value old_value,
       LISTAGG(CASE WHEN (rev_pos >= 4) THEN digit 
                    WHEN  (digit = '9') THEN '0' 
                    ELSE CHR(ASCII(digit)+1) 
               END) WITHIN GROUP (ORDER BY rev_pos DESC) new_value
  FROM (SELECT value,
               LENGTH(value)-x.pos rev_pos,
               SUBSTR(value,x.pos,1) digit               
          FROM (SELECT '6782236690' value FROM dual), -- test value
               (SELECT LEVEL pos FROM dual CONNECT BY LEVEL <= 10) x)
        
© www.soinside.com 2019 - 2024. All rights reserved.