繁体   English   中英

Oracle SQL - 如何将字符串拆分为多个部分但不拆分单词

[英]Oracle SQL - how to split up a string into parts but not break up words

我需要将一个长描述分成 4 个部分,每个部分最多 60 个字符,但我需要每个部分以空格结尾(不分解任何单词)。 最好的方法是什么? 下面是代码片段,但我需要它不要分解单词。

SELECT emplid as SHRQPNM_PIDM,
       substr(listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr), 1, 60),
       substr(listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr), 61, 60),
       substr(listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr), 121, 60),
       substr(listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr), 181, 60),
       to_char(sysdate, 'YYYYMMDD') SHRQPNM_ACTIVITY_D,
FROM   PS_TSCRPT_TEXT
GROUP BY emplid, print_loc_SEQ) 
order by emplid, print_loc_SEQ;

电流输出示例:

DOCTORAL THESIS -A MEASUREMENT OF DISTORTION PRODUCT **OTOACOU|STIC** EMISSIONS WHILE ATTENDINGTO FAMILIAR AND UNFAMILIAR **VIS|UAL** STIMULATION|

如果要从输出中去除尾随空格,则可以使用:

SELECT emplid as SHRQPNM_PIDM,
       REGEXP_SUBSTR(
         listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr),
         '(.{1,60})( |$)',
         1,
         1,
         NULL,
         1
       ) AS part1,
       REGEXP_SUBSTR(
         listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr),
         '(.{1,60})( |$)',
         1,
         2,
         NULL,
         1
       ) AS part2,
       REGEXP_SUBSTR(
         listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr),
         '(.{1,60})( |$)',
         1,
         3,
         NULL,
         1
       ) AS part3,
       REGEXP_SUBSTR(
         listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr),
         '(.{1,60})( |$)',
         1,
         4,
         NULL,
         1
       ) AS part4,
       to_char(sysdate, 'YYYYMMDD') SHRQPNM_ACTIVITY_D
FROM   PS_TSCRPT_TEXT
GROUP BY emplid, print_loc_SEQ
order by emplid, print_loc_SEQ;

其中,对于样本数据:

CREATE TABLE ps_tscrpt_text (emplid, ssr_transcript_txt, text_seq_nbr, print_loc_seq) AS
SELECT 1,
       'DOCTORAL THESIS',
       1,
       1
FROM   DUAL UNION ALL
SELECT 1,
       ' -A MEASUREMENT OF DISTORTION PRODUCT OTOACOUSTIC EMISSIONS WHILE ATTENDINGTO FAMILIAR AND UNFAMILIAR VISUAL STIMULATION|',
       2,
       1
FROM   DUAL;

输出:

SHRQPNM_PIDM 第1部分 第2部分 第三部分 第 4 部分 SHRQPNM_ACTIVITY_D
1 博士论文-畸变产物的测量 参加熟悉和熟悉的耳声排放 不熟悉的视觉刺激 无效的

如果您想在输出中包含尾随空格(并且最多包含 60 个字符),则:

SELECT emplid as SHRQPNM_PIDM,
       REGEXP_SUBSTR(
         listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr),
         '(.{1,59})( |$)',
         1,
         1
       ) AS part1,
       REGEXP_SUBSTR(
         listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr),
         '(.{1,59})( |$)',
         1,
         2
       ) AS part2,
       REGEXP_SUBSTR(
         listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr),
         '(.{1,59})( |$)',
         1,
         3
       ) AS part3,
       REGEXP_SUBSTR(
         listagg(SSR_transcript_txt) WITHIN GROUP (ORDER BY text_seq_nbr),
         '(.{1,59})( |$)',
         1,
         4
       ) AS part4,
       to_char(sysdate, 'YYYYMMDD') SHRQPNM_ACTIVITY_D
FROM   PS_TSCRPT_TEXT
GROUP BY emplid, print_loc_SEQ
order by emplid, print_loc_SEQ;

db<> 在这里摆弄

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM