数据:dad(disc_id = 90910 and disc_item_id in (91793,92375)) and (disc_id = 91648 and disc
_item_id in (92625,92626)) or (disc_id = 50001610 and disc_item_id =50002164) or
 (disc_id = 50005959 and disc_item_id =50003118)add最后需要的结果如下:
(disc_id = 90910 and disc_item_id in (91793,92375))(disc_id = 91648 and disc
_item_id in (92625,92626))(disc_id = 50001610 and disc_item_id =50002164)(disc_id = 50005959 and disc_item_id =50003118)add说明:需要找出数据中的所有第一级括号里面的内容。

解决方案 »

  1.   

    select regexp_replace(x,'(^([A-Z]{1,}\()|(\)[A-Z]{1,})$)','',1,0,'i') from dual
      

  2.   


    declare
     s varchar2(300);
    begin
     s:='dad(disc_id = 90910 and disc_item_id in (91793,92375)) and
        (disc_id = 91648 and disc_item_id in (92625,92626)) or
        (disc_id = 50001610 and disc_item_id =50002164) or
        (disc_id = 50005959 and disc_item_id =50003118)add'; select regexp_replace(s,'[^\(\)]*(\(.*\))[^\(\)]*','\1')||regexp_substr(s,'[^\(\)]*$') into s from dual;
     dbms_output.put_line(s);
    end;
    /