Mysql - 将变量与存储的通配符进行比较

时间:2021-07-13 12:25:05

标签: mysql

我在 Mysql 中有一个表,其中包含存储为通配符的 IP 范围。例如:52.% 代表所有以 52 开头的 IP。或者例如:65.154.226.% 代表所有以 65.154.226 开头的 IP。

对于原始用例,它按预期工作。但是我现在试图通过实际查询存储为通配符的数据来切换它。我想知道我是否输入了数据库中存在的 IP(作为通配符)。示例查询:

SELECT * FROM IpList WHERE IP LIKE '52.1.1.1';

这可以在一个查询中实现吗?如果是这样,有人能指出我正确的方向吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以将 REGEXPsubstring_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 表中的记录列表。