我在 Mysql 中有一个表,其中包含存储为通配符的 IP 范围。例如:52.% 代表所有以 52 开头的 IP。或者例如:65.154.226.% 代表所有以 65.154.226 开头的 IP。
对于原始用例,它按预期工作。但是我现在试图通过实际查询存储为通配符的数据来切换它。我想知道我是否输入了数据库中存在的 IP(作为通配符)。示例查询:
SELECT * FROM IpList WHERE IP LIKE '52.1.1.1';
这可以在一个查询中实现吗?如果是这样,有人能指出我正确的方向吗?
非常感谢!
答案 0 :(得分:0)
您可以将 REGEXP
与 substring_index
一起使用来实现此目的。
查询 -
select *
from IpList
where IP regexp concat(substring_index("52.1.1.1", ".", 1), ".%.%.%")
or IP regexp concat(substring_index("52.1.1.1", ".", 2), ".%.%")
or IP regexp concat(substring_index("52.1.1.1", ".", 3), ".%")
or IP regexp "52.1.1.1";
它将为您提供 IpList
表中的记录列表。