Разделить строку и сохранить подстроки в массиве - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть строка, которая выглядит примерно так:

(InstrTyp EQ DebtInstruments) AND (IntrnlTrdTyp EQ IntraGrpBP) AND (Entity EQ GSSTH)

Я хотел бы сохранить их в массив, такой что:

  • 1-й элемент: InstrTyp EQ DebtInstruments
  • 2-й элемент: IntrnlTrdTyp EQ IntraGrpBP
  • 3-й элемент: Entity EQ GSSTH

Новичок в PL / SQL, оцените подробный ответ.

Ответы [ 2 ]

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

Вы можете использовать regexp_substr для извлечения строки в скобках

DECLARE
     TYPE string_array_typ IS
          TABLE OF VARCHAR2(100);
     split_strs       string_array_typ := string_array_typ(); --define and declare an array of string
     l_str_to_split   VARCHAR2(1000) := '(InstrTyp EQ DebtInstruments) AND (IntrnlTrdTyp EQ IntraGrpBP) AND (Entity EQ GSSTH)'
     ;
BEGIN 
FOR i IN 1..regexp_count(l_str_to_split,'\(.*?\)')  --loop until as many number of strings between `()`
  LOOP 
   split_strs.extend;
   split_strs(i) := regexp_substr(l_str_to_split,'\((.*?)\)',1,i,NULL,1); -- Assign ith element to ith word between `()`
 END loop;

 FOR i IN 1..split_strs.count LOOP
     dbms_output.put_line(split_strs(i) ); --display the contents of the array
  END LOOP;
END;
/
0 голосов
/ 22 февраля 2019

Мы можем попробовать сделать это в два этапа.Сначала удалите все скобки из входной строки, затем выполните регулярное выражение для массива по шаблону \s*AND\s*:

select
    regexp_split_to_array(regexp_replace(txt, '[()]', '', 'g'), '\s*AND\s*')
from your_table;

enter image description here

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...