DB | Postgres | Как проверить, находится ли IP в списке IP-адресов или в диапазоне - PullRequest
2 голосов
/ 02 августа 2020

У меня есть таблица, в которой есть столбец TEXT, содержащий 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 []); </p>

но я не могу понять, как я могу заставить его работать для моих спецификаций c таблица и получить все первые 4 строки.

Пожалуйста, помогите Спасибо заранее

1 Ответ

1 голос
/ 02 августа 2020

Я думаю, это то, что вы хотите:

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

Здесь - скрипка db <>.

...