在SQL中清除IPv4点分四地址

时间:2010-03-25 16:32:07

标签: sql postgresql ip-address ipv4

给定一个包含存储为VARCHAR(15)的点分四IPv4地址的表,例如:

     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是postgresql 8.4,但越便携越好!

感谢。

更新:虽然我很欣赏(并且做了upvote)光滑的INET / CIDR答案,但我希望生成一个字符串输出用非数字字符代替最后两个八位字节。 (再次,越便携越好!)

3 个答案:

答案 0 :(得分:3)

对于postgres:

select regexp_replace('172.16.1.100', E'(.\\d+){2}$', '.x.y');

答案 1 :(得分:3)

如果您使用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

答案 2 :(得分:1)

常规是将列类型转换为inet/cidr

编辑: 使用这种本机数据类型,有相当多的specific函数比任何字符串操作都要好得多。