在SQL
擦洗IPv4点,四地址给出一个包含存储为VARCHAR(15)
点分四组IPv4地址,例如表:在SQL
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,但越便携越好!
谢谢。
UPDATE:虽然我欣赏(并给予好评)光滑INET
/CIDR
答案,我期待以产生具有非数字字符的最后两个八位字节取代的串输出。 (同样,越便携越好!)
Postgres的:
select regexp_replace('172.16.1.100', E'(.\\d+){2}$', '.x.y');
如果您使用Postgres类型,那么您可以使用inet操作符来完成此操作,例如。 <<=
表示'包含在'内。我怀疑的东西LIK下面会做你的需要:
select my_ipaddress & inet '255.255.0.0' from my_ip_table;
手册参考:http://www.postgresql.org/docs/8.4/static/functions-net.html
+1这并不坏,最后两个八位字节砸到零... – pilcrow 2010-03-25 17:09:19
这就是你怎么做的! – 2010-03-26 09:30:59
我的Postgres叫我把它写成选择REGEXP_REPLACE(“172.16.1.100”,E'(\\ d +){2} $','.x.y'); – Unreason 2010-03-25 16:49:25
+1。这与我的原始方法有一个明显的改进,那就是:'从E'^(([1-9] [0-9] {0,2} \。){} })')|| 'x.y''谢谢! – pilcrow 2010-03-25 20:16:53
当你不需要使用正则表达式时,不要使用正则表达式。只需使用propper网络功能和运营商。 – 2010-03-26 09:30:38