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 ?>
  • 相关阅读:
    centos 添加 composer
    laravel5 缓存的使用
    git 的使用
    php 消息队列 rabbitmq 的安装使用
    vue插件大汇总
    vue 2.0 Gzip打包压缩
    Easy Mock 为啥那么打不开了?
    element ui 打印 表格
    解决 element 日期范围选择问题(只能选择相邻的 连两个月)
    vue router 的路由传参 params 和 query 的 区别
  • 原文地址:https://www.cnblogs.com/jing1617/p/8479687.html
Copyright © 2011-2022 走看看