当前位置:  开发笔记 > 后端 > 正文

使用SQL确定子网掩码的cidr值

如何解决《使用SQL确定子网掩码的cidr值》经验,为你挑选了1个好方法。

我想找到一种方法来执行SQL查询,该查询将计算存储在数据库中的子网掩码的cidr(位表示).例如,我有255.255.255.0或其十进制值(4294967040)存储在数据库中.我想通过查询进行选择并返回/ 24表示.

我做了以下的事情来确定子网的最后一个IP,所以我希望做类似的事情来确定一个掩码的cidr表示.

select concat(inet_ntoa(ip_addr),'-',
    inet_ntoa(ip_addr+(POWER(2,32)-ip_mask-1))) range 
from subnets 
order by ip_addr

最好这是一个可以在mysql,postgres,oracle等下工作的SQL语句.



1> Matt P..:

我想我找到了解决问题的方法.这是我做的:

select CONCAT(INET_NTOA(ip_addr),'/',32-log2((4294967296-ip_mask))) net 
from subnets 
order by ip_addr

基本上我采用我的decmial掩码并从最大十进制值中减去它.然后我在该值上使用log2来获取对数值.然后简单地从32减去(最大可用位).

希望能帮助别人.

谢谢

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有