我有一个很长的字符串,我必须在每300个字符后加上逗号。
我正在使用它并且工作正常:
select regexp_replace(column_name,'(.{300})','\1,') from table_name ;
但条件是我们不能在一个单词中加任何逗号。所以我们要检查第300个字符是否是空格,然后放一个逗号,否则找到前一个空格并在那里放逗号。
类似的情况:(我需要10而不是300)
运行查询后
select regexp_replace(column_name,'(.{10})','\1,') from table_name ;
示例输入:(即column_name的值):
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras viverra consectetur magna, vel vulputate sapien convallis ut.
示例输出:
Lorem ipsu,m dolor si,t amet, co,nsectetur ,adipiscing, elit. Cra,s viverra ,consectetu,r magna, ,vel ,vulputate sapien ,convallis ,ut.
但这是出乎意料的。
输出应该是这样的:
Lorem ,ipsum dolor ,sit amet, ,consectetur ,adipiscing, elit. ,Cras viverra ,,consectetur magna,, vel ,vulputate sapien ,convallis ,ut.
有人可以帮我吗?
答案 0 :(得分:3)
我使用了|
而不是逗号,因为您提供的示例数据使用了逗号:
Oracle 11g R2架构设置:
CREATE TABLE table_name( data ) AS
SELECT 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras viverra consectetur magna, vel vulputate sapien convallis ut.' FROM DUAL;
查询1 :
WITH words ( id, data, word, wordno, numwords, len, grpstart, grp ) AS (
SELECT ROWNUM,
data,
REGEXP_SUBSTR( data, '^\S+', 1, 1 ),
1,
REGEXP_COUNT( data, '(^|\s)\S+' ),
LENGTH( REGEXP_SUBSTR( data, '^\S+', 1, 1 ) ),
0,
0
FROM table_name
UNION ALL
SELECT id,
data,
REGEXP_SUBSTR( data, '\s\S+', 1, wordno + 1 ),
wordno + 1,
numwords,
len + LENGTH( REGEXP_SUBSTR( data, '\s\S+', 1, wordno + 1 ) ),
CASE
WHEN len + LENGTH( REGEXP_SUBSTR( data, '\s\S+', 1, wordno + 1 ) )
> grpstart + 10
THEN len
ELSE grpstart
END,
CASE
WHEN len + LENGTH( REGEXP_SUBSTR( data, '\s\S+', 1, wordno + 1 ) )
> grpstart + 10
THEN grp+1
ELSE grp
END
FROM words
WHERE wordno < numwords
)
SELECT LISTAGG( words, '|' ) WITHIN GROUP ( ORDER BY grp )
AS sentence
FROM (
SELECT id,
grp,
LISTAGG( word, '' ) WITHIN GROUP ( ORDER BY len ) AS words
FROM words
GROUP BY id, grp
)
GROUP BY id
<强> Results 强>:
| SENTENCE |
|-------------------------------------------------------------------------------------------------------------------------------------|
| Lorem| dolor sit| amet,| consectetur| adipiscing| elit.| Cras| viverra| consectetur| magna,| vel| vulputate| sapien| convallis| ut. |
答案 1 :(得分:0)
您可以尝试在正则表达式中添加类似[^ a-z]的内容,以排除a-z中的所有字符。