【问题标题】:Parsing string in PL/SQL stored procedure在 PL/SQL 存储过程中解析字符串
【发布时间】:2015-04-28 09:38:41
【问题描述】:
DECLARE @steps LONG VARCHAR;
SET @steps='1200-abc,1300,1400-enhk1,1500'

我需要将@steps 设为'1200,1300,1400,1500'

请告诉我如何在 PL/SQL 中的存储过程中实现这一点

提前感谢您的建议

【问题讨论】:

    标签: plsql format


    【解决方案1】:

    您可以按出现次数进行迭代regexp_substr,或者像这样选择它们

    for item in (SELECT regexp_substr('1200-abc,1300,1400-enhk1,1500', '\w(\d+)\w', 1, LEVEL) val
          FROM dual
        CONNECT BY regexp_substr('1200-abc,1300,1400-enhk1,1500', '\w(\d+)\w', 1, LEVEL) IS NOT NULL)
    loop
          dbms_output.put_line(item.val);
    end loop;
    

    【讨论】:

      【解决方案2】:

      你可以这样:

      declare
      
        i varchar2(4000);
        v_array apex_application_global.vc_arr2;
        only_numbers  varchar2(100) :='';
      begin
      
        i := '1200-abc,1300,1400-enhk1,1500';
      
        v_array := apex_util.string_to_table(i, ',');
      
        for e in 1 .. v_array.count loop
      
            only_numbers:=only_numbers || regexp_substr(v_array(e),'[[:digit:]]*') ||',';
      
      
        end loop;
      
      only_numbers := rtrim( only_numbers, ',' );
      dbms_output.put_line(only_numbers);   -- output :  1200,1300,1400,1500
      
      end;
      

      【讨论】:

      • 谢谢大家的回复
      【解决方案3】:
      create function del_non_numerics(str varchar2)
      return varchar2
      is
      v_return_txt varchar2(3000);
      begin
      select regexp_replace(str,'[^0-9,]+','') into v_return_txt
      from dual;
      
      return v_return_txt;
      end;
      /
      

      调用上面的代码为 del_non_numerics('1200-abc,1300,1400-enhkl,1500') => 1200,1300,1400,1500

      【讨论】:

        猜你喜欢
        • 2017-06-05
        • 2016-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多