MySQL在命令之间返回错误的IP地址或数字

时间:2014-06-09 12:06:09

标签: mysql ip return between

我有一个MySQL表格,其中包括" 192.168.1.1"等,我想得到1.20和.136之间的IP地址,ip列类型是varchar,我的查询是;

select * from kayitlar where ip between ('192.168.1.20') and ('192.168.1.36')

当我运行此命令时,mysql返回1.20和1.36之间的记录,并返回1.220,.1.224等记录。我也尝试使用&lt; =或&gt; =运算符,但结果是相同的。< / p>

我在这里缺少什么?

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以在IPV4类型的地址上使用'INET_ATON'功能。

SELECT * from kayitlar 
 WHERE   INET_ATON( ip ) BETWEEN 
         INET_ATON( '192.168.1.20' ) 
     AND INET_ATON( '192.168.1.36' )

您也可以在IP地址上尝试'HEX'

SELECT  * FROM kayitlar 
 WHERE  HEX( ip ) BETWEEN 
        HEX( '192.168.1.20' ) 
    AND HEX( '192.168.1.36' )
  FROM  kayitlar 

请参阅

答案 1 :(得分:0)

如果您需要针对IP地址进行更复杂的匹配,我建议您使用int数据类型来存储IP地址。 MySQL支持inet_aton() / inet_ntoa(),用于在点分表示法和int之间进行转换。

如果您这样做,那么您可以使用以下内容,例如:

SELECT * FROM kayitlar 
 WHERE ip BETWEEN INET_ATON('192.168.1.20') AND INET_ATON('192.168.1.36');

这也允许您使用按位运算符执行子网匹配:

SELECT INET_NTOA(INET_ATON('192.168.0.1') & INET_ATON('255.255.255.0'));

答案 2 :(得分:0)

您可以使用以下查询:

select * from kayitlar where SUBSTRING(ip, 9) between ('1.20') and ('1.36');