我有一个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>
我在这里缺少什么?
提前致谢。
答案 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');