oracle将字符串中的数字筛选,从字符串中取数字 - Oracle开发 - ITPUB论坛-中国专业的IT技术社区...

是问高人是否有此类更简炼函数吗/

CREATE OR REPLACE  PROCEDURE prc_get_char_to_num (p_str IN   VARCHAR2)

AS

/*

*   功能:取出含有数字字符串,分别写到数组中.

*  eg: abc123def321a1

*  分别提取为a(1):=123,a(2):=321,a(3):=1;

*/

v_len  NUMBER(10);

i       NUMBER(10);

j       NUMBER (10);   --数组长度

v_yes  BOOLEAN ;     -- 是否是数字

v_continu_num  BOOLEAN;  --是否是连续的数字

v_begin_num    BOOLEAN;  --数字是否断开

v_last_num     BOOLEAN;  --最后一个是否是数字

v_num_chr  VARCHAR(10);

v_num     NUMBER(10);

TYPE array_type IS TABLE OF number(10) INDEX BY BINARY_INTEGER;

v_FEE array_type;

BEGIN

v_len:=length(p_str);

IF v_len IS NOT NULL THEN  --如果传进来的参数为空

i:=0;

j:=1;

v_continu_num := FALSE;

v_begin_num   :=FALSE;

v_last_num    :=FALSE;

for i in 1..v_len loop   --(1)  对每个字符进行循环

v_yes        := FALSE;

v_continu_num := TRUE;

if to_number(ascii(substr(p_str,i,1)))>=48

and to_number(ascii(substr(p_str,i,1)))<=57 THEN --判断是否是数字

v_yes         := TRUE;

v_begin_num   := TRUE;

IF i=v_len THEN   --如果最后一个字符是数字的情况

-- dbms_output.put_line('number');

v_last_num := TRUE;

END IF;

ELSE

v_continu_num := FALSE;

END IF ;

IF v_yes = TRUE AND   v_continu_num = TRUE THEN

v_num_chr :=v_num_chr||substr(p_str,i,1);

END IF;

--如果v_nu_chr已经有数字且数字已经被字符串断开,或者最后一个字符是数字的情况,赋值给字符串

IF (v_continu_num =FALSE  AND v_begin_num=TRUE)

OR v_last_num=TRUE THEN

v_num :=to_number(v_num_chr);

v_num_chr :=NULL;

v_begin_num :=FALSE;

v_FEE(j) := v_num;

j := j+1;

END IF;

END LOOP;

--  v_num :=v_fee.COUNT;

for i in 1..v_FEE.COUNT loop   --(1)

dbms_output.put_line(i||':='||v_fee(i));

END LOOP;

ELSE

NULL ;

END IF;

END;

/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值