DECLARE @steps LONG VARCHAR;
SET @steps='1200-abc,1300,1400-enhk1,1500'
我需要得到@steps
爲'1200,1300,1400,1500'
。解析PL/SQL存儲過程中的字符串
請讓我知道它是如何在PL/SQL存儲過程可能提前爲您的建議
感謝
DECLARE @steps LONG VARCHAR;
SET @steps='1200-abc,1300,1400-enhk1,1500'
我需要得到@steps
爲'1200,1300,1400,1500'
。解析PL/SQL存儲過程中的字符串
請讓我知道它是如何在PL/SQL存儲過程可能提前爲您的建議
感謝
您可以通過OCCURENCES 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
感謝所有的回覆 – user3393023