[英]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.