如何在 sql 轻松地将 139.29.0.0 转换为 139.029.000.000?

How can I easily convert 139.29.0.0 to 139.029.000.000 at sql?

如何在 sql 轻松地将 139.29.0.0 转换为 139.029.000.000?

有不同的方法。一种是将字符串拆分为四个数字,然后重新格式化它们。

另一种方法只使用正则表达式。以下用三个零填充所有数字,然后在每个 '.' 或字符串结尾之前取最后三位数字:

select regexp_replace(regexp_replace(ip, '([0-9]+)', '000'), '[0-9]*([0-9]{3}([.]|$))', '')
from (select '139.29.0.0' as ip from dual) x

一个选项是按点拆分,将前导零填充到 3 精度,然后再聚合回来,例如

 SELECT LISTAGG( LPAD( REGEXP_SUBSTR(n,'[^.]+',1,level), 3, '0'), '.' ) WITHIN GROUP (ORDER BY level) AS IP
   FROM t 
CONNECT BY level <= REGEXP_COUNT(n,'.')+1
    AND PRIOR SYS_GUID() IS NOT NULL
    AND PRIOR n = n
  GROUP BY n   

Demo