ORCLE中例如1.11.123排序

create or replace function num_sort(str varchar2) return varchar2 is
v_s varchar2(50);
i number;--存储获取的位置
j number;--循环的重要变量
x number;--存储第二个特殊字符的位置
y varchar2(50);--接收判断是否大于10
begin
j := 0;
x := 0;
v_s := '';
select nvl(length(translate(str, 'a0123456789', ' ')),-1) into i from dual;
if (str is null) then--最顶级
v_s := '00';
elsif (str is not null and i=-1) then--第二级
if str<10 then--1位数字,补0再屏贴
v_s := '0' || str;
else
v_s := str;
end if;
end if;
while i > 0 loop
j := j + 1;
if (j=1) then--第一个
select substr(str,1,INSTR(str,'.',1,1)) into y from dual;
if y<10 then--1位数字,补0再屏贴
v_s := v_s || '0' || y;
else
v_s := v_s || y;
end if;
end if;
if (i>1) then--中间 i>1说明还没有结束,如果只有一个特殊字符,那么只会循环一次,且不会进入中间
select INSTR(str,'.',1,j+1)-INSTR(str,'.',1,j) into x from dual;
if (x = 2) then--1位数字,补0再屏贴
select substr(str,INSTR(str,'.',1,j)+1,1) into y from dual;
elsif (x = 3) then --2位数字,补0再屏贴
select substr(str,INSTR(str,'.',1,j)+1,2) into y from dual;
end if;
elsif (i=1) then--取最后一个
select substr(str,INSTR(str,'.',1,j)+1,3) into y from dual;
end if;
--每次循环的时候,取特殊字符 . 对应的字符串是否小于10,
--如果小于,使用0进行补充并组合在一个字符串中
if y<10 then--1位数字,补0再屏贴
v_s := v_s || '00' || y;
elsif y<100 then
v_s := v_s || '0' || y;
else
v_s := v_s || y;
end if;
i := i - 1;--每次减一,循环的条件
end loop;
return v_s;
end num_sort;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值