Используя regexp_substr, получим дробные числа из строки.
SELECT regexp_substr(str, '([[:digit:]]+[.]{1}[[:digit:]]+)+', 1, level) str
FROM (
SELECT ' 5646.45, 45 sd eds,.sd 9 2 566.11 12.3' str FROM dual) t
CONNECT BY
regexp_substr(str,'([[:digit:]][.]{1}[[:digit:]])+',1, level) is not null;
STR
---------------------------------------
5646.45
566.11
12.3
with t as (
select 'есть длинная строка - которую нужно разбить на строчки по сто символов.'
|| 'Но слова разбивать нельзя, переносить нужно по '
||rpad('qwerty',110,'o')||'абвгд' as s from dual
)
select trim(regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level))
from t
CONNECT BY
regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level) is not null;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as apps
SQL> with t as (
2 select 'есть длинная строка - которую нужно разбить на строчки по сто символов.'
3 || 'Но слова разбивать нельзя, переносить нужно по '
4 ||rpad('qwerty',110,'o')||'абвгд' as s from dual
5 )
6 select trim(regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level)) as str
7 from t
8 CONNECT BY
9 regexp_substr(s,'(.{0,99}(\s|$))|[^[:space:]]{100}',1,level) is not null;
STR
--------------------------------------------------------------------------------
есть длинная строка - которую нужно разбить на строчки по сто символов.Но слова
переносить нужно по
qwertyoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooабвгд

Регулярные выражения произошли из теорий автоматов и формальных языков, поэтому поначалу производят устрашающее впечатление. Однако, их базовые понятия являются простыми и в то же время мощными.
Начиная с версии Oracle 10g регулярные выражения можно использовать напрямую в SQL запросах.
Шаблон регулярных выражений выражается в виде строки, содержащей следующие конструкции:
- Литеральные символы. Фактические символы, которые следует искать (Например, шаблон xyz соответствует только вхождению «xyz»)
- Метасимволы. Операции, определяющие алгоритмы, которые должны применяться во время поиска (Например, шаблон ^xyz соответсвует только строке, начинающейся с «xyz» — другие вхождения не учитываются)
Читать дальше про “Регулярные выражения Oracle (regular expression)” »
Для того чтобы разбить строку на подстроки, используя разделитель «;», можно воспользоваться следующим запросом.
Разделитель, конечно, может быть разный.
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.
Другие примеры…
Читать дальше про “Извлечь подстроки используя разделители” »
Последние комментарии