【问题标题】:oracle: remove only blank linesoracle:只删除空行
【发布时间】:2019-05-15 20:51:54
【问题描述】:

如何删除sql或plsql中的空行 输入

select 'test1
    test2
  test3



test4' from dual;

预期输出:

test1
test2
test3
test4

TRANSLATE 正在删除所有换行符

【问题讨论】:

    标签: sql regex oracle


    【解决方案1】:

    您可以在一个 regexp_replace 中完成。指定多行模式的参数,只需将行首的零个或多个空白字符替换为空。这样,只有行首的空格(如果有的话)会被删除,这样嵌入的空格(可能在单词之间)就会被保留,如果这是你想要的。

    with data(txt) as (
    select 'test1
        test2
      test3
    
    
    
    test4' from dual
    )
    select regexp_replace(txt, '^\s*', null, 1, 0, 'm') txt 
    from data;
    

    输出:

    TXT                    
    -----------------------
    test1
    test2
    test3
    test4                 
    
    
    1 row selected.
    

    【讨论】:

    • 似乎比我的 wood 解决方案优雅得多;)
    【解决方案2】:

    首先你使用replace简单地去掉空格。

    在第二步中,您必须删除重复的换行符 - 仅将它们替换为一个换行符 - 用户regexp_replace为此目的。

    请注意,您需要根据您的操作系统调整 新行。 如果有标签或其他白色的东西,类似的也适用于空白。

    with dta as (
    select 'test1
        test2
      test3
    
    
    
    test4' as txt from dual)
    select regexp_replace(replace(txt,' ',null),chr(10)||'+',chr(10)) txt from dta;
    
    TXT                   
    -----------------------
    test1                   
    test2                   
    test3                   
    test4
    

    请注意,您仍然只能得到一行结果 - 如果您想要四行结果,您必须另外拆分新行上的字符串,参见例如here

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 1970-01-01
      • 2022-11-20
      • 2019-04-05
      • 2014-08-10
      • 1970-01-01
      • 2019-06-12
      • 2018-04-27
      相关资源
      最近更新 更多