例如我们现在要在一个表中查出 ip 在 192.168.1.3 到 192.168.1.20 之间的 ip 地址,我们首先想到的就是通过字符串的比较来获取查找结果,但是如果我们通过这种方式来查找,结果集将为空,原因在于字符串的比较是一个字符一个字符的比较,当对应字符相同时,就比较下一个,直到遇到能区分大小的字符,才停止比较,后面的字符也将忽略。
如果通过字符串的比较就会查出空集,因为前者已经比后者大了。
我们可以通过 INET_ATON(IP) 函数把 ip 转换为数字,然后在进行比较,这样就可以得出我们需要的结果:
select * from ip_table where inet_aton(ip) > inet_aton('192.168.1.3') and inet_aton(ip) < inet_aton('192.168.1.20');