数据库 |邮政系统 |如何检查 IP 是否在 IP 列表或范围内

DB | Postgres | How to check if IP is in a list of IPs or a range

我有一个 table,它有一个包含 IP、IP 或范围(例如 1.1.1.1/24)的 TEXT 列。 如果有多个 IP,IP 将由 @##@ 分隔 例如 1.1.1.1@##@2.2.2.2

table 有 4 行:

    ip
    ------------------
    1.1.1.1
    1.1.1.1@##@2.2.2.2
    1.1.1.1/24
    3.3.3.3
    2.2.2.2

我想获取所有包含 ip 1.1.1.1 或 3.3.3.3 的行,这意味着我想获取前 4 行。 (1.1.1.1,1.1.1.1@##@2.2.2.2,1.1.1.1/24,3.3.3.3)

我在另一个堆栈溢出问题中找到了这个解决方案: select inet '192.168.1.5' << 任意 (array['192.168.1/24', '10/8']::inet[]);

但我无法理解如何让它适用于我的特定 table 并获得所有前 4 行。

请帮忙 提前致谢

我认为这符合您的要求:

select t.*
from t
where '1.1.1.1'::inet <<= any(regexp_split_to_array(t.ips, '@##@')::inet[])

Here 是一个 db<>fiddle.