【发布时间】: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 中的存储过程中实现这一点
提前感谢您的建议
【问题讨论】:
DECLARE @steps LONG VARCHAR;
SET @steps='1200-abc,1300,1400-enhk1,1500'
我需要将@steps 设为'1200,1300,1400,1500'。
请告诉我如何在 PL/SQL 中的存储过程中实现这一点
提前感谢您的建议
【问题讨论】:
您可以按出现次数进行迭代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;
【讨论】:
你可以这样:
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;
【讨论】:
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
【讨论】: