#sql #oracle #oracle11g
#sql #Oracle #oracle11g
Вопрос:
Oracle DB У меня есть значение в одной ячейке — пример:
ID TEXT
1 textText text №1-2-3 texttext, text,text №1 - 1000
textText text №1-2-3 texttext, text,text №2 - 1030
2 textText text №1-2-3 texttext, text,text №3 - 1031
textText text №1-2-3 texttext, text,text №4 - 1032
textText text №1-2-3 texttext, text,text №5 - 1033
Нужно сделать выбор как:
ID TEXT NUM
1 textText text №1-2-3 texttext, text,text №1 1000
1 textText text №1-2-3 texttext, text,text №2 1030
2 textText text №1-2-3 texttext, text,text №3 1031
2 textText text №1-2-3 texttext, text,text №4 1032
2 textText text №1-2-3 texttext, text,text №5 1033
Попробуйте regexp_substr, но я мог бы разделить ТЕКСТ и NUM и NUM в качестве новой записи. Мне нужен ТЕКСТ и число разделов и переход к новой записи.
Моя попытка была похожа:
select regexp_substr(str, '^[^—] ', 1, level) TEXT,
regexp_substr(str, '[0-9] $', 1, level) NUM
from (select 'textText text №1-2-3 texttext, text,text №1 — 1000
textText text №1-2-3 texttext, text,text №2 — 1030'
str from dual)
CONNECT BY regexp_substr(str, '^[^—] ', 1, level) is not null;
И результат только одна строка, а не 2 и NUM — последнее значение, а не текущее
Ответ №1:
with tab(id,txt) as(
select 1 as id , 'textText text №1-2-3 texttext, text,text №1 - 1000'||CHR(13)||CHR(10)||
'textText text №1-2-3 texttext, text,text №2 - 1030' as txt from dual union all
select 2, 'textText text №1-2-3 texttext, text,text №3 - 1031'||CHR(13)||CHR(10)||
'textText text №1-2-3 texttext, text,text №4 - 1032'||CHR(13)||CHR(10)||
'textText text №1-2-3 texttext, text,text №5 - 1033' as txt from dual
)
select t.*
,substr(t.value,instr4(t.value,'-',-1) 2) as num
from (
select id
, regexp_substr(txt,'^.*$', 1, level,'m') as value
from tab
connect by regexp_substr(txt,'^.*$', 1, level,'m') is not null
and prior id = id
and prior sys_guid() is not null
) t
Результат:
1 textText text ?1-2-3 texttext, text,text ?1 - 1000 1000
1 textText text ?1-2-3 texttext, text,text ?2 - 1030 1030
2 textText text ?1-2-3 texttext, text,text ?3 - 1031 1031
2 textText text ?1-2-3 texttext, text,text ?4 - 1032 1032
2 textText text ?1-2-3 texttext, text,text ?5 - 1033 1033