代码之家  ›  专栏  ›  技术社区  ›  pilcrow

在SQL中清除IPv4虚线四元地址

  •  0
  • pilcrow  · 技术社区  · 14 年前

    给定一个表,其中包含存储为 VARCHAR(15) ,例如:

         ipv4
    --------------
     172.16.1.100
     172.16.50.5
     172.30.29.28
    

    SELECT 全部的 "ipv4" 最后两个八位字节被删除的字段,因此上面的内容将变成:

        ipv4
    ------------
     172.16.x.y
     172.16.x.y
     172.30.x.y
    

    目标RDBMS是postgresql8.4,但是移植性越强越好!

    谢谢。

    虽然我真的很欣赏(也很喜欢)滑头 INET / CIDR 一串 用非数字字符代替最后两个八位字节的输出(再说一次,越便携越好!)

    3 回复  |  直到 14 年前
        1
  •  3
  •   Konrad Garus    14 年前

    对于博士后:

    select regexp_replace('172.16.1.100', E'(.\\d+){2}$', '.x.y');
    
        2
  •  3
  •   a'r    14 年前

    如果您使用Postgres inet类型,那么您可以使用inet操作符来实现这一点,例如。 <<=

    select my_ipaddress & inet '255.255.0.0' from my_ip_table;
    

    手册参考: http://www.postgresql.org/docs/8.4/static/functions-net.html

        3
  •  1
  •   Unreason    14 年前

    传统的方法是将列类型转换为 inet/cidr

    对于这种本机数据类型,有很多 specific 性能比任何字符串操作都好的函数。