Вы можете преобразовать этот «список» в массив и использовать его для поиска других строк с такими же IP-адресами.
Что-то в этом роде:
select *
from the_table t1
where exists (select *
from the_table t2
where regexp_split_to_array(t1.ip, '\s*[^0-9.]\s*')
&& regexp_split_to_array(t2.ip, '\s*[^0-9.]\s*')
and t1.supplier_id <> t2.supplier_id)
Выражение regexp_split_to_array(t1.ip, '\s*[^0-9.]\s*')
преобразует «список» IP-адресов в массив и разбивает на все, что не является «IP-адресом». Поэтому regexp_split_to_array('84.20.93.11- 84.20.93.11, 84.20.93.11', '\s*[^0-9-, ]\s*')
возвращает следующий массив {84.20.93.11,84.20.93.11,84.20.93.11}
. Затем &&
проверяет, перекрываются ли массивы двух поставщиков, т. Е. Имеют ли они хотя бы один общий IP-адрес.