您的位置:首页 > 数据库 > MySQL

mysql利用INET_ATON或INET_NTOA比较ip

2014-09-24 19:06 761 查看
INET_ATON(expr)
给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。地址可以是4或8比特地址。

mysql> SELECT INET_ATON('209.207.224.40');

        -> 3520061480

产生的数字总是按照网络字节顺序。如上面的例子,数字按照 209×2563 + 207×2562 + 224×256 + 40进行计算。

INET_ATON() 也能理解短格式 IP 地址:

mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');

        -> 2130706433, 2130706433

注释: 在存储由INET_ATON()
产生的值时,推荐你使用 INT UNSIGNED 列。假如你使用 (带符号) INT列,则相应的第一个八位组大于127的IP
地址值会被截至  2147483647 (即, INET_ATON('127.255.255.255')所返回的值)。请参见11.2节,“数值类型”。

INET_NTOA(expr)
给定一个数字网络地址 (4 或 8 比特),返回作为字符串的该地址的电地址表示。

mysql> SELECT INET_NTOA(3520061480);

-> '209.207.224.40'

 

将表中两个ip转换成int型,再进行ip比较    

UPDATE t_terminal_menu SET s=INET_ATON(trade_id),e=INET_ATON(id);

/**

*通过ip获取地区信息

*/

public IpInfo getIpInfoByIp(String ipAddress) {

  if(null == ipAddress || !isIp(ipAddress)){

   return null;

  }

  try {

   Long ipNum = getIpNum(ipAddress);

   String hql = "select * from IpInfo where s<=" + ipNum + " and e>=" + ipNum;

   List<IpInfo>  listIpInfos = getBaseDao().query(hql);

   if(null != listIpInfos && listIpInfos.size() > 0){

    return listIpInfos.get(0);

   }else{

    return null;

   }

  } catch (Exception e) {

   e.printStackTrace();

   throw new ServiceException("根据ip获取地区信息失败");

  }

 }

/**

*将ip转换成int型

*/

 public  long getIpNum(String ipAddress){    

     String[] ip = ipAddress.split("\\.");       

      return Long.parseLong(ip[0]) * 256 * 256 * 256L + Long.parseLong(ip[1]) * 256 * 256L + Long.parseLong(ip[2]) * 256L + Long.parseLong(ip[3]);     

 }         

/**

*判断是不是ip

*/

 public boolean isIp(String ipAddress)  { 

        String ip = "((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))";  

        Pattern pattern = Pattern.compile(ip);  

        Matcher matcher = pattern.matcher(ipAddress);  

        return matcher.matches();  

 } 

trade_id:开始ip

id:结束ip 

s:转换成int型的开始ip

e:转换成int型的结束ip
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: