繁体   English   中英

SQL喜欢一系列数字

[英]Sql LIKE a range of numbers

我有一个表FT,其中包含名为IPaddress的列。 列中的数据均为“ 100.45.4.7”形式的I​​P地址。 我只是想知道是否可以选择从100.45.xx到100.150.xx的所有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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM