У меня есть таблица, содержащая 2 текстовых столбца: тип и IP. Оба они могут представлять собой один текст или несколько текстов, разделенных символом '@ ## @'. кроме того, ip также может быть диапазоном, например 1.1.1.1/24
таблица ниже
row |type | ip
-------------------------------------------
1 |red | 1.1.1.1
2. |red@##@blue | 1.1.1.1@##@2.2.2.2
3. |blue | 1.1.1.1/32@##@2.2.2.2/32
4. |yellow | 1.1.1.1
5. |red | 3.3.3.3
6. |yellow@##@red | 1.1.1.1
7. |blue | 1.1.1.1@##@3.3.3.3
Я хочу получить все строки, которые имеют тип красный или синий или оба (точно красный и синий или меньше, что означает один красный или один синий) И IP 1.1.1.1 или 2.2.2.2 или оба, включая диапазоны (точно 1.1.1.1 и 2.2.2.2 или меньше, что означает один 1.1.1.1 или один 2.2.2.2 или если у нас несколько IP-адресов, они должны точно или меньше соответствовать диапазону)
означает, что я хочу получить строки 1,2,3
Я начал писать следующий запрос но не могу понять:
SELECT * FROM t where
regexp_split_to_array(t.type, '@##@')::text[] in ('red','blue')
and
regexp_split_to_array(t.ip, '@##@')::inet[] in ('1.1.1.1','2.2.2.2')
Заранее спасибо!