【发布时间】:2019-10-04 17:15:05
【问题描述】:
我有一个表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)
【问题讨论】:
-
你尝试了吗?我们不解决家庭作业。
-
我当然试过了……不,这不是家庭作业!我将发布一些代码来复制示例和我的尝试
-
如果单词长于 7 个字符怎么办?
-
实际值长度拆分为 60 或 30,因此这是一个罕见的例外