如何在 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
如何在 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