Как разбить строку с разделителями на n (n-1) / 2 для комбинаций в Oracle SQL? - PullRequest
0 голосов
/ 17 ноября 2018

Например, "красный / зеленый / синий" разделяется на следующие

red red/green red/green/blue

select * from table where column in('red','red/green','red/green/blue');

1 Ответ

0 голосов
/ 17 ноября 2018

Вы можете использовать комбинации substr и inst как:

with t as
(
select 'red/green/blue' as str from dual
)
select substr(str,1,instr(str,'/',1,1)-1) str1,
       substr(str,1,instr(str,'/',1,2)-1) str2,
       str as str_whole
  from t;

STR1    STR2        STR_WHOLE
----    ----------  --------------
red     red/green   red/green/blue

Если вы хотите получить построчно, вы можете использовать, добавив regexp_count со следующим стилем:

with t as
(
select 'red/green/blue' as str from dual
)
select decode(sign(instr(str,'/',1,level)),1,substr(str,1,instr(str,'/',1,level)-1),str)
       as str
  from t
connect by level <= regexp_count(str,'/') + 1; 

STR 
--------------   
red     
red/green   
red/green/blue

Rextester Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...