在mysql表中查找可用的IP地址范围

9
我有以下SQL语句。它用于搜索IP地址的时候非常有效。但是我也希望能够进行其他类型的搜索。
select * from table 
where (INET_ATON(ip) BETWEEN INET_ATON('10.12.77.1') AND INET_ATON('10.12.77.10') )
limit 30

结果很好

10.12.77.2
10.12.77.5
10.12.77.6

如何获取可用的IP地址,类似于

10.12.77.1
10.12.77.3
10.12.77.4
10.12.77.7
10.12.77.8
10.12.77.9
10.12.77.10

这个问题可以在mysql中解决,也可以在Java中解决。

谢谢


你的问题不太清楚... 你是想在每个IP地址前加上空格吗? - Kamran Ahmed
不不,我想要第一次结果的补集。这意味着范围内的所有地址 - 第一个结果。 - user2475153
用Java等编程语言来完成,这不是SQL的工作。 - Toby Allen
1
在每一行上应用INET_ATON是低效的。考虑将值数值化存储,即INET_ATON的返回值。 - Gumbo
通常情况下,最好在演示层/应用程序级别的代码中处理缺失数据问题。 - Strawberry
最终我用Java实现了。谢谢大家的回复。 - user2475153
2个回答

1
你尝试过不在冒号之间吗?
select * from table 
where (INET_ATON(ip) NOT BETWEEN INET_ATON('10.12.77.1') AND INET_ATON('10.12.77.10') )
limit 30

顺便提一下,您的查询看起来是从1到10的,那么为什么限制30呢?应该是10。

谢谢。


0

Apache Commons Net有一个SubnetUtils类,用于IP和子网掩码计算非常方便实用。您可以使用有效的子网掩码值初始化对象,并获取SubnetInfo类以获取各种信息。

SubnetUtils subnet = new SubnetUtils("10.12.77.1", "255.255.255.242");
SubnetInfo subnetInfo = subnet.getInfo();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接