You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle场景模式匹配与指定字符提取:长文本按规则截取实现问询

Oracle实现长文本中多片段的匹配与字符提取

假设你的源表结构如下(可根据实际表名、字段名调整):

CREATE TABLE source_table (
    rec_id VARCHAR2(10), -- 记录标识,如S101、S102
    long_text CLOB       -- 包含多个以"Sentence"开头片段的长文本字段
);

核心查询语句

通过正则匹配拆分所有Sentence开头的片段,并截取每个片段的前50个字符:

SELECT
    rec_id,
    SUBSTR(REGEXP_SUBSTR(long_text, 'Sentence.*?(?=(Sentence|$))', 1, level), 1, 50) AS extracted_sentence
FROM source_table
CONNECT BY
    level <= REGEXP_COUNT(long_text, 'Sentence')
    AND PRIOR rec_id = rec_id
    AND PRIOR SYS_GUID() IS NOT NULL;

关键逻辑说明

  • 正则匹配拆分:REGEXP_SUBSTR用非贪婪模式.*?匹配从Sentence开始,到下一个Sentence或文本结尾的完整片段,level参数遍历所有匹配结果
  • 字符截取:SUBSTR(..., 1, 50)提取每个匹配片段的前50个字符
  • 多行拆分控制:CONNECT BY结合REGEXP_COUNT实现单个记录拆分出多条结果,PRIOR SYS_GUID() IS NOT NULL避免产生循环数据

注意事项

  • 如果长文本字段是VARCHAR2类型,直接替换CLOB即可(Oracle 12c及以上支持最大32767长度的VARCHAR2)
  • 若文本包含换行符,需在REGEXP_SUBSTR中添加'n'匹配参数,让.能匹配换行符:
    REGEXP_SUBSTR(long_text, 'Sentence.*?(?=(Sentence|$))', 1, level, 'n')
    

内容的提问来源于stack exchange,提问作者Chinu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:42:51