Sql喜欢一系列数字

时间:2016-04-03 21:30:24

标签: mysql sql sql-like

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

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

THX!

2 个答案:

答案 0 :(得分:4)

不要将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()。相同的原则也适用于那里。)

答案 1 :(得分:1)

Duskwuff给出了一个非常好的答案,我推荐使用我的答案。

但如果您被迫保留当前结构,则可以使查询的工作方式如下:

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