给定一个包含存储为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
答案,但我希望生成一个字符串输出用非数字字符代替最后两个八位字节。 (再次,越便携越好!)
答案 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)