Как разбить строку со специальными символами в оракуле PL / SQL - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу разбить строку ниже на основе определенной строки.Как мы можем это сделать?

abc\\10.2.4\\string with spaces\\1.2.3-another-string\\def\\string_with_underscores

разделить на 'def'

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Будет ли это полезно?

SQL> with test (col) as
  2    (select 'abc\\10.2.4\\string with spaces\\1.2.3-another-string\\def\\string_with_underscores' from dual)
  3  select regexp_substr(replace(col, 'def', '#'), '[^#)]+', 1, level) res
  4  from test
  5  connect by level <= regexp_count(col, 'def') + 1;

RES
--------------------------------------------------------------------------------
abc\\10.2.4\\string with spaces\\1.2.3-another-string\\
\\string_with_underscores

SQL>
  • строки 1 и 2 представляют ваши данные
  • строки 3 - 5 используются для разбиения этого столбца на строки
    • строка 3: REPLACE заменяет 'def' на '#', что становится новым разделителем
    • , строка 5: у вас будет столько строк, сколько разделителей 'def' встрока + 1 (т. е. если есть 4 разделителя «def», в результате вы получите 5 строк)

Для этого параметра не требуется знать заранее сколько подстрок вы получите в результате, оно динамическое .

0 голосов
/ 27 февраля 2019

Вы можете использовать regexp_replace как в следующем запросе:

with tab(str) as
(
 select 'abc\\10.2.4\\string with spaces\\1.2.3-another-string\\def\\string_with_underscores' 
   from dual 
)
select regexp_replace(str,'def.*','') str1,
       regexp_replace(str,'.*def','') str2
  from tab;

    STR1                                                   STR2
-------------------------------------------------------    -------------------------
abc\\10.2.4\\string with spaces\\1.2.3-another-string\\    \\string_with_underscores
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...