分割字符串,并将子字符串保存在数组中

时间:2019-02-22 10:15:54

标签: oracle plsql

我有一个像这样的字符串:

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

我想将它们保存在一个数组中,以使:

  • 第一个元素:InstrTyp EQ DebtInstruments
  • 第二个元素:IntrnlTrdTyp EQ IntraGrpBP
  • 第三个元素:Entity EQ GSSTH

是PL / SQL的新手,请提供详细的答案。

2 个答案:

答案 0 :(得分:2)

您可以使用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;
/

答案 1 :(得分:1)

我们可以尝试分两个步骤进行操作。首先,从输入字符串中删除所有括号,然后将正则表达式拆分为模式\s*AND\s*上的数组:

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

enter image description here

Demo