0

给定一个包含点分四边形 IPv4 地址的表,该地址存储为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 是 postgresql 8.4,但越便携越好!

谢谢。

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

4

3 回答 3

3

对于 postgres:

select regexp_replace('172.16.1.100', E'(.\\d+){2}$', '.x.y');
于 2010-03-25T16:38:41.750 回答
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

于 2010-03-25T16:47:06.593 回答
1

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

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

于 2010-03-25T16:39:49.253 回答