оракул: удалить только пустые строки - PullRequest
2 голосов
/ 15 мая 2019

Как удалить пустые строки в sql или plsql Ввод

select 'test1
    test2
  test3



test4' from dual;

Ожидаемый вывод:

test1
test2
test3
test4

TRANSLATE удаляет все символы новой строки

Ответы [ 2 ]

3 голосов
/ 16 мая 2019

Сначала вы просто избавляетесь от пробелов, используя 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

Обратите внимание, что в результате вы по-прежнему получаете только одну строку - если вы хотите получить результат в четыре строки, вы должны дополнительно разбить строку на новую строку, см., Например, здесь

2 голосов
/ 16 мая 2019

Вы можете сделать это в одном 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...