db | postgres |如何检查ip是否在ip列表或范围内

ewm0tg9j  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(303)

我有一个表,它有一个包含ip、ip或范围的文本列(例如1.1.1.1/24)。如果有多个IP,IP之间将用@##分隔,例如1.1.1.1@##@2.2.2.2
包含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)
我在另一个堆栈溢出问题中找到了这个解决方案:选择inet'192.168.1.5'<<any(array['192.168.1/24','10/8']::inet[]);
但我不明白如何才能使它适用于我的特定表,并让我所有的前4行。
请帮忙提前谢谢

kpbpu008

kpbpu0081#

我想这正是你想要的:

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

这是一把小提琴。

相关问题