2015-01-09 5 views
0

У меня есть следующее содержимое таблицы.SQL Разделить разделитель и создать новую строку

COLUMN_A | COLUMN_B 

a   | 123!234!345 
b   | 809!123!678!456 
c   | 678!789 

Есть ли способ иметь SQL для разделения разделителя "!" и создать новую строку, как показано ниже? Количество разделителей в column_B в случайном

COLUMN_A | COLUMN_B 

a   | 123 
a   | 234 
a   | 345 
b   | 809 
b   | 123 
b   | 678 
b   | 456 
c   | 678 
c   | 789 
+3

Какие СУБД вы используете? Вы отметили 3. –

+0

возможный дубликат [Turning a Comma Separated string в отдельные строки] (http://stackoverflow.com/questions/5493510/turning-a-comma-separated-string-into-individual-rows) и http : //stackoverflow.com/questions/2938427/converting-delimited-string-to-multiple-values-in-mysql – radar

+0

MSSQL, mySQL и Oracle. У меня здесь вся система. –

ответ

0

Ok нашли ответ на Oracle. Работает только на 11g и 12c

select COLUMN_A, subSTR(COLUMN_B, inSTR(COLUMN_B, '!', 1, lvl) + 1, inSTR(COLUMN_B, '!', 1, lvl + 1) - inSTR(COLUMN_B, '!', 1, lvl) - 1) name 
from 
(select '!' || COLUMN_B || '!' as COLUMN_B, COLUMN_A from table), 
(select level as lvl from dual connect by level <= 100) 
where lvl <= length(COLUMN_B) - length(replace(COLUMN_B, '!')) - 1 
order by COLUMN_A, COLUMN_B