with t as
(
select 'a' a, 2 n from dual union all
select 'b' a, 3 n from dual union all
select 'c' a, 5 n from dual union all
select 'd' a, 1 n from dual union all
select 'e' a, 0 n from dual
)
select *
from t,
table(select collect(level) from dual connect by level<=t.n);
A N COLUMN_VALUE
- ---------- ------------
a 2 1
a 2 2
b 3 1
b 3 2
b 3 3
c 5 1
c 5 2
c 5 3
c 5 4
c 5 5
d 1 1
e 0 1
12 rows selected
При n=0, строка останется.
Читать дальше про “Создать дубликаты строк” »
Для того чтобы разбить строку на подстроки, используя разделитель «;», можно воспользоваться следующим запросом.
Разделитель, конечно, может быть разный.
SQL> SELECT regexp_substr(str, '[^;]+', 1, level) str
2 FROM (
3 SELECT ' 1; 2; test1.' str FROM dual ) t
4 CONNECT BY instr(str, ';', 1, level - 1) > 0
5 ;
STR
-------------
1
2
test1.
Если хотим разбить на слова используя в виде разделителя пробел, то можно использовать perl синтаксис:
SQL> SELECT regexp_substr(str, '\S+', 1, level) str
2 FROM (
3 SELECT ' 1 2 test1.' str FROM dual ) t
4 connect by regexp_substr(str,'\S+',1,level) is not null
5 ;
STR
-----------
1
2
test1.
Другие примеры…
Читать дальше про “Извлечь подстроки используя разделители” »
Последние комментарии