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

如何修改PL/SQL正则表达式,保留字段最后一个换行并替换中间换行?

SQL数据格式调整:保留最后一个换行,替换中间换行为空格

问题需求

将Sample_Table表的DESCRIPTION字段内容处理为:字段值内的中间换行替换为空格,仅保留最后一个换行。生成Insert语句时效果如下:

原Insert语句:

Insert into Sample_Table
   (DESCRIPTION)
 Values
   ('This is example
test
TEST');

预期Insert语句:

Insert into Sample_Table
   (DESCRIPTION)
 Values
   ('This is example test
TEST');

现有PL/SQL代码未实现预期效果,需修改:

DECLARE

CURSOR chk_for_bad_data IS
   SELECT description
     FROM Sample_Table 
    WHERE REGEXP_LIKE (replace(replace(description,chr(10), ';'), CHR(09), ';'), '[^[:print:]]', 'x');

BEGIN

   FOR get_bad_data IN chk_for_bad_data LOOP

       UPDATE Sample_Table 
       SET description = regexp_replace(description, '(.*)(\r?\n)+$', '\1\r\n');
       WHERE descriptio = get_bad_data.description
   END LOOP;     
END;

解决方案

可以通过正则表达式实现需求,核心是精准区分中间换行和末尾换行。修改后的PL/SQL代码如下:

DECLARE
    CURSOR chk_for_bad_data IS
        SELECT description
          FROM Sample_Table 
         WHERE REGEXP_LIKE(replace(replace(description, CHR(10), ';'), CHR(09), ';'), '[^[:print:]]', 'x');
BEGIN
    FOR get_bad_data IN chk_for_bad_data LOOP
        UPDATE Sample_Table 
           SET description = 
               -- 替换所有非末尾的换行符为空格,再确保末尾保留一个标准换行
               REGEXP_REPLACE(
                   REGEXP_REPLACE(get_bad_data.description, '(\r?\n)(?!$)', ' '),
                   '(.*)(\r?\n)?$', '\1' || CHR(13) || CHR(10)
               )
         WHERE description = get_bad_data.description; -- 修正原代码拼写错误
    END LOOP;
    COMMIT; -- 提交事务使更新生效
END;
/

关键逻辑说明

  1. 第一步正则替换:'(\r?\n)(?!$)' 使用负向断言(?!$),匹配所有不在字符串末尾的换行符(兼容\n和\r\n格式),替换为空格,这一步处理所有中间换行。
  2. 第二步正则替换:'(.*)(\r?\n)?$' 捕获字段全部内容,无论原末尾是否有换行,都统一添加标准的\r\n换行,确保最后仅保留一个换行。
  3. 修正了原代码中的拼写错误descriptio→description,避免执行报错。
  4. 新增COMMIT语句,确保更新操作持久化。

简化场景版

如果可以确认所有DESCRIPTION字段末尾原本就存在换行,可简化为一步替换:

SET description = REGEXP_REPLACE(get_bad_data.description, '(\r?\n)(?!.*\r?\n)', ' ')

该正则匹配所有后续仍有换行的换行符(即中间换行),直接替换为空格,最后一个换行因后续无其他换行,会被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:24:55