Главная
>
SQL > Разбить строку на строчки по 100 символов, не разбивая слова
Разбить строку на строчки по 100 символов, не разбивая слова
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абвгд
Похожие записи:
Раньше не пользовалась регулярными выражениями, решила поизучать на ваших примерах.
Проверила ваш пример (в TOAD), получила другой результат:
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;
—————————————в рез-те только это:
qwertyoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooабвгд
@Елена
Попробуйте выполнить данный запрос в sql*plus.
Только что запустил запрос на базе 11.2.0.2.0, отработало корректно.
SQL*Plus Version 10.1.0.4.2 — результат такой же.
В более старых версиях, чем ваша, по другому работает?
@Елена
С версии 10gR2 регулярные выражения работают несколько иначе, видимо связано с этим.
Почитайте, например,Жадная и ленивая квантификация в регулярных выражениях