Mysql Sql就像一系列数字

Mysql Sql就像一系列数字,mysql,sql,sql-like,Mysql,Sql,Sql Like,我有一个表FT,其中包含一个名为IPaddress的列。列中数据均为IP地址,格式为“100.45.4.7”。 我只是想知道我是否可以选择从100.45.x.x到100.150.x.x的所有IP地址。(我不关心最后两个节点)。我有以下代码运行时没有出错,但我不确定是否正确 select * from FT where IPaddress like "100.[45-150]%" 谢谢 不要将IP地址存储为字符串。将它们存储为整数 使用MySQL函数INET\u ATON()

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

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

谢谢

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

使用MySQL函数
INET\u ATON()
将IP地址字符串转换为数字,并使用
INET\u NTOA()
将其转换回数字。执行此转换后,与IP相对应的数字将是连续的,因此您可以在查询中使用诸如INET_-ATON('100.45.0.0')和INET_-ATON('100.150.255.255')之间的
IPaddress等条件


(您的编程语言可能也有类似的函数;例如,PHP有
ip2long()
long2ip()
。同样的原则也适用于这些函数。)

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

使用MySQL函数
INET\u ATON()
将IP地址字符串转换为数字,并使用
INET\u NTOA()
将其转换回数字。执行此转换后,与IP相对应的数字将是连续的,因此您可以在查询中使用诸如INET_-ATON('100.45.0.0')和INET_-ATON('100.150.255.255')
之间的
IPaddress等条件


(您的编程语言可能也有类似的函数;例如,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 

Duskwuff给出了一个非常好的答案,我建议用它来代替我的

但是,如果您被迫保持当前结构,您可以使查询按如下方式工作:

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

谢谢!!我将IP地址存储为INT。然后存储的数据变为“1215”,而不是“100.45.7.8”。你能再核实一下吗?太多了@Daskwuff实际上所有数据都存储为1215,而不是4个节点的原始格式(例如:“100.45.7.8”),您做错了什么。确保列的类型为
无符号整数
@dashwuff thx!我使用的是mysql workbench,所以我所做的就是通过将类型从“varchar”更改为“int(200)”来单击工作台上的那些按钮。我想这就是我搞砸的地方。当您更改现有表的列类型时,mysql不会为您进行转换。您必须应用并更新表才能更改所有行。thx!!我将IP地址存储为INT。然后存储的数据变为“1215”,而不是“100.45.7.8”。你能再核实一下吗?太多了@Daskwuff实际上所有数据都存储为1215,而不是4个节点的原始格式(例如:“100.45.7.8”),您做错了什么。确保列的类型为
无符号整数
@dashwuff thx!我使用的是mysql workbench,所以我所做的就是通过将类型从“varchar”更改为“int(200)”来单击工作台上的那些按钮。我想这就是我搞砸的地方。当您更改现有表的列类型时,mysql不会为您进行转换。您必须在表上应用并更新以更改所有行。thx才能获得答案!我在python上使用了sql语句,它说没有这样的子字符串索引函数,你知道为什么吗?太多了!!!!!!很可能是因为您的mysql版本没有它。请尝试5.1及以上版本。thx以获取答案!我在python上使用了sql语句,它说没有这样的子字符串索引函数,你知道为什么吗?太多了!!!!!!很可能是因为您的mysql版本没有它。尝试5.1及以上版本。