在PL / SQL存储过程中解析字符串

时间:2015-04-28 09:38:42

标签: plsql format

DECLARE @steps LONG VARCHAR;
SET @steps='1200-abc,1300,1400-enhk1,1500'

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

请告诉我PL / SQL中存储过程的可行性

提前感谢您的建议

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

你可以这样做:

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;

答案 2 :(得分:0)

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