关于IP地址的问题,如何设计表?或者说如何编程呢?

wyard 2002-10-08 02:42:01
010.010.000.000 010.016.255.255 天津169用户
010.010.064.000 010.016.076.255 天津169电信
010.010.191.000 010.010.193.255 天津169拨号用户
010.011.017.000 010.011.029.255 天津169专线用户
010.013.002.000 010.011.002.255 天津169专线用户
010.013.048.000 010.011.048.255 天津169专线用户
010.013.064.000 010.011.064.255 天津169专线用户
010.017.000.000 010.017.000.255 河北169省电信
010.017.000.000 010.022.255.255 河北169用户
010.017.016.000 010.017.016.255 河北ZX
010.017.032.000 010.017.032.255 河北邯郸
010.017.040.000 010.017.040.255 河北邯郸169用户
010.017.144.000 010.017.148.255 河北石家庄169用户
010.017.178.000 010.017.178.255 河北石家庄169用户
010.017.191.000 010.017.191.255 河北石家庄169用户
010.018.000.000 010.018.001.255 河北保定169电信
010.018.000.000 010.018.095.255 河北保定
010.018.008.000 010.018.008.255 河北保定169拨号用户
010.018.096.000 010.018.127.255 河北张家口
010.018.100.000 010.018.100.255 河北张家口169用户
010.018.128.000 010.018.159.255 河北承德
010.018.132.000 010.018.132.255 河北承德169用户
010.018.160.000 010.018.255.255 河北唐山
010.018.168.000 010.018.168.255 河北唐山169用户
010.019.000.000 010.019.063.255 河北廊坊
010.019.008.000 010.019.008.255 河北廊坊169用户
010.019.064.000 010.019.127.255 河北沧州
010.019.072.000 010.019.072.255 河北沧州169用户
010.019.128.000 010.019.159.255 河北衡水
010.019.132.000 010.019.132.255 河北衡水169用户
010.019.160.000 010.019.192.255 河北邢台
010.019.164.000 010.019.164.255 河北邢台169用户
010.019.192.000 010.019.255.255 河北秦皇岛
010.019.200.000 010.019.200.255 河北秦皇岛169用户

已知以上结构的数据,我想设计一个或几个表,可以实现输入一个IP地址得到所在地。我想了好长时间没有好的思路。因为里边又有嵌套的问题,比较的问题,希望高手指教。
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyard 2002-10-11
  • 打赏
  • 举报
回复
好像还不错,谢谢。
qiuyang_wang 2002-10-08
  • 打赏
  • 举报
回复
我想了一个办法,不知道行还是不行:
首先上面的地址应该保存为没有点的格式
比如:010.019.128.000 保存为:010019128000
这样网段长度就可以用相减的方法得到.
如果通过比较可以得到多条数据,则取网段长度最小的就可以了.
比如数据库设计为这样(表名:TAB1):
id VARCHAR2(20) 主键;
ipmin VARCHAR2(12);
ipmax VARCHAR2(12);
dz VARCHAR2(100);
则可以用下面的语句得到你要的结果(由于当前没有调试环境,不能保证语句的正确,还请原谅):
select dz from (select id,to_number(ipmax) - to_number(ipmin) wdcd,dz from TAB1 where ipmin <= 指定ip and ipmax >= 指定ip order by wdcd) where rownum <= 1;
wyard 2002-10-08
  • 打赏
  • 举报
回复
难点就在这里,是有一个总的网段,里边又存在几个小网段。如果一个地址不在小的网段内,那就应该属于大的网段。我得到的数据就是这样,所以想不出方法。而且我觉得在作地址比较时也比较麻烦,也想不出好方法。
hrb_qiuyb 2002-10-08
  • 打赏
  • 举报
回复
你的地址有交差如:
010.018.000.000 010.018.001.255 河北保定169电信
010.018.000.000 010.018.095.255 河北保定

当一个地址为010.018.006,你说它是哪呢?

当你把交差分开后,那就太好办了.
guorui_wh 2002-10-08
  • 打赏
  • 举报
回复
有什么规律吗?

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧