Вы получаете только одно совпадение, поскольку используемые вами функции (split_part
, regexp_substr
) возвращают n-й элемент совпадения.
Самый наивный подход для решения этого:
select regexp_substr(split_part('ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4',',',1),'ABC[^"]*')
union all
select regexp_substr(split_part('ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4',',',2),'ABC[^"]*')
union all
...
select regexp_substr(split_part('ABC1,ABC2,WWW1,WWW2,ABC3,WWW3,WWW4,ABC4',',',20),'ABC[^"]*')
Чтобы улучшить это, вам нужно сначала преобразовать значение с разделителями-запятыми в несколько строк, а затем использовать регулярное выражение. Это можно сделать различными способами, см. этот пост для получения более подробной информации.
Результат: ABC1 ABC2
Сложная часть здесь, этоОтсутствие генерирующей таблицы функции для разделения значения через запятую на несколько строк.