Sql 喜欢一系列数字

Sql LIKE a range of numbers

我有一个 table FT 包含一个名为 IPaddress 的列。列中的数据均为“100.45.4.7”形式的I​​P地址。 我只是想知道我是否可以 select 从 100.45.x.x 到 100.150.x.x 的所有 IP 地址。 (我不关心最后两个节点)。我有以下代码 运行 没有错误,但我不确定我是否正确。

          select * from FT where IPaddress like "100.[45-150]%"

谢谢!

不要将 IP 地址存储为字符串。将它们存储为整数。

使用 MySQL 函数 INET_ATON() 将 IP 地址字符串转换为数字,然后 INET_NTOA() 转换回来。执行此转换后,IP 对应的数字将是连续的,因此您可以在查询中使用 IPaddress BETWEEN INET_ATON('100.45.0.0') AND INET_ATON('100.150.255.255') 等条件。

(您的编程语言可能也有类似的功能;例如,PHP 有 ip2long()long2ip()。同样的原理也适用。)

Duskwuff 给出了一个非常好的答案,我建议您使用我的答案。

但是如果您被迫保留当前结构,您可以使查询像这样工作:

select * from FT where SUBSTRING_INDEX( IPaddress , '.', 1) = 100 AND SUBSTRING_INDEX(SUBSTRING_INDEX( IPaddress , '.', 2 ),'.',-1) BETWEEN 45 AND 150