某个字段格式如下:xxxxxx[2016]1号、xxxxxx[2017]10号。
现在我需要对末尾的号数进行处理,不足三位就补0,比如1号改为001,10号改为010
。求教这个过程应该怎么写?
纯手打,麻烦分数给我,直接可以用,你自己设置个变量吧,在命令行调用exec tran;
create or replace procedure tran is
v_tran varchar2(100):='xxxxxx[2016]1号';
v_num number:='0';
begin
select length(v_tran) into v_num from dual;
if v_num=16 then
dbms_output.put_line(v_tran);
elsif v_num=15 then
dbms_output.put_line(substr(v_tran,1,12)||'0'||substr(v_tran,13,2));
elsif v_num=14 then
dbms_output.put_line(substr(v_tran,1,12)||'00'||substr(v_tran,13,2));
else
dbms_output.put_line('请输入合法的字符串,如xxxxxx[2016]1号');
end if;
end;
包头定义:
/*测试*/
PROCEDURE PRC_OPERATION(PRM_STR IN VARCHAR2, --IN传入字符串
PRM_RESULT OUT VARCHAR2); --OUT 返回字符串
包体定义:
/*测试*/
PROCEDURE PRC_OPERATION(PRM_STR IN VARCHAR2, --IN传入字符串
PRM_RESULT OUT VARCHAR2) --OUT 返回字符串
IS
BEGIN
SELECT SUBSTR(PRM_STR, 1, INSTR(PRM_STR, ']')) ||
LPAD(SUBSTR(PRM_STR,
INSTR(PRM_STR, ']') + 1,
(INSTR(PRM_STR, '号') - INSTR(PRM_STR, ']')) - 1),
4,
'0') || '号'
INTO PRM_RESULT
FROM DUAL;
EXCEPTION
WHEN OTHERS THEN
PRM_RESULT := '操作出错!!!';
RETURN;
END PRC_OPERATION;
测试结果:
create or replace procedure tran(v_tran in varchar2) is
v_num number:='0';
begin
select length(v_tran) into v_num from dual;
if v_num=16 then
dbms_output.put_line(v_tran);
elsif v_num=15 then
dbms_output.put_line(substr(v_tran,1,12)||'0'||substr(v_tran,13,3));
elsif v_num=14 then
dbms_output.put_line(substr(v_tran,1,12)||'00'||substr(v_tran,13,2));
else
dbms_output.put_line('请输入合法的字符串,如xxxxxx[2016]1号');
end if;
end;
--命令行输入,exec tran('xxxxxx[2016]1号');
-----------------这是我针对你的需求所写的一个函数------------------
create or replace function get_strs (str in varchar2)
return varchar2 is
strs varchar2(200);
begin
if length(substr(str,instr(str,']')+1,instr(str,'号'))) = 1 then
strs := substr(str,0,instr(str,']'))||'000'||substr(str,instr(str,']')+1,instr(str,'号'));
elsif length(substr(str,instr(str,']')+1,instr(str,'号'))) = 2 then
strs := substr(str,0,instr(str,']'))||'00'||substr(str,instr(str,']')+1,instr(str,'号'));
elsif length(substr(str,instr(str,']')+1,instr(str,'号'))) = 3 then
strs := substr(str,0,instr(str,']'))||'0'||substr(str,instr(str,']')+1,instr(str,'号'));
elsif length(substr(str,instr(str,']')+1,instr(str,'号'))) = 4 then
strs := substr(str,0,instr(str,']'))||substr(str,instr(str,']')+1,instr(str,'号'));
end if;
return strs;
end;
-----------------------------------在哪个地方需要用就把参数传进去获得返回值即处理后的值------------------------------------------
select get_strs('xxxxxx[2016]10号') from dual
---------------------------结果图------------------------------
希望能对你有所帮助