Я нашел множество подобных вопросов, но ни один из них не подходит мне на 100%. у меня оракул 11г экспресс
у меня есть эта строка
'abcd,123,,defoifcd,"comma, in string",87765,,,hello'
это означает, что обычно запятая разделяет данные, но могут быть и пустые данные (даже больше в серии), и если в данных есть запятая, она указывается в кавычках.
на данный момент лучший reg exp это тот
'("[^"]*"|[^,]+)'
но это помещает в конец все пустые данные, используя этот запрос
with test as
(select
'abcd,123,,defoifcd,"comma, in string", 87765,,,hello'
str from dual
)
select REGEXP_SUBSTR(str, '("[^"]*"|[^,]+)', 1, rownum) split
from test
connect by level <= length (regexp_replace (str, '("[^"]*"|[^,]+)')) + 1;
я также попытался заменить пустые данные на ,n/a, чтобы иметь
'abcd,123,n/a,defoifcd,"comma, in string",87765,n/a,n/a,hello'
но regexp_replace заменяет только первое появление пустых данных
select
regexp_replace('abcd,123,,defoifcd,"comma, in string",87765,,,hello', '(,,)', ',n/a,')
str from dual;
заранее спасибо!