我有一个像slot001
这样的插槽号码。现在我必须增加一些user_input
值(比如说5)。输出应该是:
slot001
slot002
slot003
slot004
slot005
我尝试编写一段代码,但无法区分slot001
和slot1
。字符串长度不固定,但它将是字数字格式。
我的方法:
CREATE OR REPLACE PROCEDURE Pr_procedure_poc
(
slot_numin IN VARCHAR2,
range_countin IN NUMBER
) is
v_slt_num NUMBER;
v_slot VARCHAR2(100) := slot_numin;
v_slt_var VARCHAR2(100);
v_temp VARCHAR2(100);
begin
SELECT Regexp_substr(slot_numin, '\d+')
INTO v_slt_num
FROM dual;
SELECT Regexp_substr(slot_numin, '\D+')
INTO v_slt_var
FROM dual;
FOR i IN 0 .. (range_countin -1) LOOP --range_countin :=user input to increament the string
v_temp := v_slt_num + i;
v_slot := v_slt_var||v_temp;
end loop;
end
Pr_procedure_poc;
输出slot_numin =' abc001'和范围= 10:
abc1
abc2
abc3
abc4
abc5
abc6
abc7
abc8
abc9
abc10
输出slot_numin =' abc1'和范围= 10:
abc1
abc2
abc3
abc4
abc5
abc6
abc7
abc8
abc9
abc10
预期产出: slot_numin的输出=' abc001'和范围= 10:
ABC001
abc002
abc003
abc004
abc005
abc006
abc007
abc008
abc009
abc010
输出slot_numin =' abc1'和范围= 10:
abc1
abc2
abc3
abc4
abc5
abc6
abc7
abc8
abc9
abc10
答案 0 :(得分:0)
扩展正则表达式以查找是否存在前导零,如果是,则在to_char()
函数中使用带前导零的格式:
v_temp := to_char(v_slt_num + i, 'fm09999');
答案 1 :(得分:0)
扩展Rusty的简短回答:
declare
slot_numin varchar2(100) := 'slot0001';
varpart varchar2(100) := regexp_substr(slot_numin, '\D+');
numpart varchar2(100) := regexp_substr(slot_numin, '\d+');
digits number := length(numpart);
begin
for i in 1..9 loop
dbms_output.put_line(
varpart
|| to_char((to_number(numpart) + i),'fm'||rpad('0',digits,'0'))
);
end loop;
end;
结果:
slot0002
slot0003
slot0004
slot0005
slot0006
slot0007
slot0008
slot0009
slot0010