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

Oracle 19c使用regexp_substr按换行拆分字段并过滤空值的方法

Oracle 19c 按换行符拆分字段并清洗空值解决方案

问题根因

  • 原查询正则匹配逻辑错误:使用的'['||chr(10)||']'规则仅匹配换行符本身,无法提取换行符分隔的有效文本内容,因此无有效结果返回
  • 缺少内容清洗逻辑:未处理行首的-、空格等冗余前缀
  • 层级查询逻辑不完善:未添加行唯一标识限制,多数据场景下会生成笛卡尔积导致结果异常
  • 缺少空值过滤规则:未剔除拆分后产生的空行内容

正确实现代码

SELECT 
    ft.field_id,
    -- 清洗行首冗余字符+清除首尾空白
    TRIM(REGEXP_REPLACE(
        REGEXP_SUBSTR(ft.validation_data, '[^'||CHR(10)||']+', 1, LEVEL),
        '^[-[:space:]]+', ''
    )) AS str
FROM mytable ft
WHERE ft.validation_data IS NOT NULL
CONNECT BY 
    -- 拆分行数不超过分隔后的总段数
    LEVEL <= REGEXP_COUNT(ft.validation_data, '[^'||CHR(10)||']+')
    -- 避免多数据行交叉生成错误结果
    AND PRIOR ft.ROWID = ft.ROWID
    AND PRIOR SYS_GUID() IS NOT NULL
-- 过滤清洗后的空值结果
HAVING TRIM(REGEXP_REPLACE(
    REGEXP_SUBSTR(ft.validation_data, '[^'||CHR(10)||']+', 1, LEVEL),
    '^[-[:space:]]+', ''
)) IS NOT NULL;

适配说明

如果字段中换行符是Windows格式(CHR(13)||CHR(10)),可将匹配规则中的'[^'||CHR(10)||']+'替换为'[^'||CHR(13)||CHR(10)||']+',即可兼容两种换行格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:09:03