我有一个像这样的字符串:
(InstrTyp EQ DebtInstruments) AND (IntrnlTrdTyp EQ IntraGrpBP) AND (Entity EQ GSSTH)
我想将它们保存在一个数组中,以使:
InstrTyp EQ DebtInstruments
IntrnlTrdTyp EQ IntraGrpBP
Entity EQ GSSTH
是PL / SQL的新手,请提供详细的答案。
答案 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;