У меня есть таблица Data
с полем Note
, которое содержит длинную строку. Я хотел бы разделить содержимое каждой из этих строк каждые 30 символов без усечения слов. Это означает, что если разделение будет усекать слово, оно должно быть разделено перед этим словом и перезапустить процесс разделения из следующего:
Пример использования разделения каждого 7 символов
Данные
--------------------------
| Id | Note |
--------------------------
| 1 |I am dumb using SQL|
--------------------------
... more rows ...
--------------------------
Результат
----------------
| Id | Note |
----------------
| 1 |I am |
----------------
| 2 |dumb |
----------------
| 3 |using |
----------------
| 4 |SQL |
----------------
Обратите внимание, как происходит первое разделение: первые 7 символов равны I am du
, потому что разделение на седьмое усекает слово dumb
, разделение применяется раньше, и в результате получается I am
.
Код для репликации примера и мои попытки решить проблему:
CREATE TABLE Data (ID, NOTA);
INSERT INTO Data (ID, NOTA)
VALUES (10, 'NEL MEZZO DEL CAMMIN DI NOSTRA VITA MI RITROVAI IN UNA SELVA OSCURA');
SELECT
ID, rownum AS rn
,trim(regexp_substr(NOTA,'.{1,60}( |$)',1,rownum)) AS SPLIT_NOTA
FROM Data connect by rownum <= ceil(length(NOTA)/60)