我的表格包含两列ipStart
和ipEnd
这两个字段包含一系列ip地址。例如:
`ipStart` = 193.235.18.0
和
ipEnd = 193.235.21.255
我希望能够选择ip在该范围内的行,例如:
193.235.19.255
这可能吗?
答案 0 :(得分:19)
试试这个
SELECT *
FROM TABLE_NAME
WHERE (INET_ATON("193.235.19.255") BETWEEN INET_ATON(ipStart) AND INET_ATON(ipEnd));
答案 1 :(得分:5)
解释将ip地址转换为几个答案所依赖的数字(我同意)。
IP地址需要被视为一个32位数而不是4个8位数
例如ip地址
193.235.18.0
转换为二进制文件是: -
11000001.11101011.00010010.00000000
你转化为(即拿出点): -
11000001111010110001001000000000
解决这个问题: -
1 * 2147483648 = 2147483648
1 * 1073741824 = 1073741824
0 * 536870912 = 0
0 * 268435456 = 0
0 * 134217728 = 0
0 * 67108864 = 0
0 * 33554432 = 0
1 * 16777216 = 16777216
1 * 8388608 = 8388608
1 * 4194304 = 4194304
1 * 2097152 = 2097152
0 * 1048576 = 0
1 * 524288 = 524288
0 * 262144 = 0
1 * 131072 = 131072
1 * 65536 = 65536
0 * 32768 = 0
0 * 16384 = 0
0 * 8192 = 0
1 * 4096 = 4096
0 * 2048 = 0
0 * 1024 = 0
1 * 512 = 512
0 * 256 = 0
0 * 128 = 0
0 * 64 = 0
0 * 32 = 0
0 * 16 = 0
0 * 8 = 0
0 * 4 = 0
0 * 2 = 0
0 * 1 = 0
将这些加在一起你得到3253408256
通过将原始IP地址视为基本256号码,您可以获得一些捷径。所以你有0个单位,18个256个,235个65536个(即256 * 256个)和193个(即256 * 256 * 256个)
0 * 1 + 18 * 256 + 235 * 256 * 256 + 193 * 256 * 256 * 256
提到的INET_ATON函数可以帮到你。