Здравствуйте
имеется такой запрос
with input as
(
select 'a in (1..5)' as q from dual union all
select 'a in (3..4) or a in (10..20)' from dual union all
select 'a in (6..9) or a in (15..18)' from dual union all
select 'a in (7..8) or a in (10..20) or a in (21..100)' from dual union all
select 'a in (50..60)' from dual
)
select
regexp_substr(i.q, '[0-9]{1,3}') as a_1,
rtrim(regexp_substr(i.q, '[0-9]{1,3}\)'), ')') as a_2
from
input i
union all
select
regexp_substr(i.q, '[0-9]{1,3}', instr(i.q, 'or')),
rtrim(regexp_substr(i.q, '[0-9]{1,3}\)', instr(i.q, 'or')), ')')
from
input i
where
instr(i.q, 'or') > 0
union all
select
regexp_substr(i.q, '[0-9]{1,3}', instr(i.q, 'or', instr(i.q, 'or')+1)),
rtrim(regexp_substr(i.q, '[0-9]{1,3}\)', instr(i.q, 'or', instr(i.q, 'or')+1)), ')')
from
input i
where
instr(i.q, 'or', instr(i.q, 'or')+1) > 0
and instr(i.q, 'or') > 0
Можно ли его как-то упростить в один select?
Нужно из строки вида 'a in (6..9) or a in (15..18)' получить таблицу из двух строк