Oracle将科学计数法转化为普通形式
1.利用正则匹配科学计数法文本
SELECT REGEXP_INSTR('REGISTER NUMBER+1.0100837226E10', '[+-]?\d+(\.\d+)?([Ee][+-]?\d+)') idx FROM dual;
结果大于0,说明字串中有科学计数法表示的数字
2.转化为普通形式的函数
CREATE OR REPLACE FUNCTION F_REPLACE_SCIENTIFIC_NOTATION(as_string varchar2)
RETURN varchar2
IS
ls_as_string varchar(4000);
ls_regexp varchar(50);
ls_regstr varchar(50);
ls_replaced varchar(50);
ls_rtn varchar(4000);
ll_regstr_idx number(10);
ll_regstr_len number(10);
BEGIN
ls_as_string:=as_string;
ls_regexp:='\d+(\.\d+)?([Ee][+-]?\d+)?';
ll_regstr_idx:=REGEXP_INSTR(ls_as_string, ls_regexp);
IF ll_regstr_idx>0 THEN
ls_regstr:=regexp_substr(ls_as_string, ls_regexp);
ll_regstr_len:=length(ls_regstr);
ls_replaced:=to_char(to_number(ls_regstr));
ls_rtn:=substr(ls_as_string, 1, ll_regstr_idx-1) || ls_replaced;
ls_as_string:=substr(ls_as_string, ll_regstr_idx+ll_regstr_len);
ELSE
ls_rtn:=ls_as_string;
RETURN ls_rtn;
END IF;
ll_regstr_idx:=REGEXP_INSTR(ls_as_string, ls_regexp);
WHILE ll_regstr_idx>0 LOOP
ls_regstr:=regexp_substr(ls_as_string, ls_regexp);
ll_regstr_len:=length(ls_regstr);
ls_replaced:=to_char(to_number(ls_regstr));
ls_rtn:=ls_rtn||substr(ls_as_string, 1, ll_regstr_idx-1) || ls_replaced;
ls_as_string:=substr(ls_as_string, ll_regstr_idx+ll_regstr_len);
ll_regstr_idx:=REGEXP_INSTR(ls_as_string, ls_regexp);
END LOOP;
ls_rtn:=ls_rtn||ls_as_string;
RETURN ls_rtn;
END;