zoukankan      html  css  js  c++  java
  • mysql/oracle ip地址比较

    SELECT hub_gid FROM CPP_HUB_IPSEGMENT WHERE IpToLong(#{ip}) BETWEEN IpToLong(ip_begin) AND IpToLong(ip_end) 

    oracle实现方式:创建oracle函数

    -- 把ip转换成long型
    CREATE OR REPLACE FUNCTION IpToLong(ip2 in varchar2)
    return number
    is
      p1 number;
      p2 number;
      p3 number;
      ip varchar2(32);
    begin
      p1 := instr(ip2, ':', 1, 1); 
      if(p1 > 0) then
        ip := substr(ip2,  1, p1 -1);
      else
        ip := ip2;
      end if;
      p1 := instr(ip, '.', 1, 1);
      p2 := instr(ip, '.', 1, 2);
      p3 := instr(ip, '.', 1, 3);
      return to_number(substr(ip, 1, p1-1))*256*256*256 + to_number(substr(ip, p1+1, p2-p1-1))*256*256 + to_number(substr(ip, p2+1, p3-p2-1))*256 + to_number(substr(ip, p3+1));
    end;
    /
    -- 把long型的ip转换成ip格式
    CREATE OR REPLACE FUNCTION LongToIp(ip in number)
    return varchar2
    is
    begin
    return floor(ip/65536/256) || '.' || mod(floor(ip/65536), 256) || '.' || mod(floor(ip/256), 256) || '.' || mod(ip, 256);
    end;

    2、mysql实现方法:

    如果需要找出在某个网段的用户(例如:172.16.11.1 ~ 172.16.11.100),可以利用php的ip2long方法,把ip地址转为整型,再进行比较。

    <?php $ip_start = '172.16.11.1'; $ip_end = '172.16.11.100';  echo 'ip2long(ip_start):'.sprintf('%u',ip2long($ip_start)); // 2886732545 echo 'ip2long(ip_end):'.sprintf('%u',ip2long($ip_end));     // 2886732644 ?>
  • 相关阅读:
    C#异常小知识
    Cisco路由器配置学习-ip accounting
    Sublime Text 3预览Markdown
    什么是permit-inside功能
    锐捷双出口
    思科双出口+策略路由+NAT
    github常见操作和常见错误
    网易注册页面知识点
    java,xml等注释删除,正则表达式使用123
    简单多线程是否安全判断
  • 原文地址:https://www.cnblogs.com/jing1617/p/8479687.html
Copyright © 2011-2022 走看看