DECLARE @steps LONG VARCHAR;
SET @steps='1200-abc,1300,1400-enhk1,1500'
我需要@steps
作为'1200,1300,1400,1500'
。
请告诉我PL / SQL中存储过程的可行性
提前感谢您的建议
答案 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