CREATE OR REPLACE FUNCTioN chi2num(chivalue IN VARCHAR2) RETURN NUMBER IS TYPE MAP IS TABLE OF BI
CREATE OR REPLACE FUNCTioN chi2num(chivalue IN VARCHAR2) RETURN NUMBER IS
TYPE MAP IS TABLE OF BINARY_INTEGER INDEX BY VARCHAR2(10);
ling_jiu_map MAP;
shibaiqian_map MAP;
wanyizhao_map MAP;
--临时变量
i INT := 0; --'临时变量
k INT := 0; --临时变量
x INT := 0; --临时变量
str VARCHAR2(100) := ''; --临时变量
tmp INT := 0; --临时变量
tmp2 INT := 0; --临时变量
integer_part VARCHAR2(100) := ''; --数字形式整数部分
float_part VARCHAR2(100) := ''; --数字形式小数部分
returnvalue NUMBER := 0; --返回值
BEGIN
--初始化数组
ling_jiu_map('零') := 0;
ling_jiu_map('一') := 1;
ling_jiu_map('二') := 2;
ling_jiu_map('三') := 3;
ling_jiu_map('四') := 4;
ling_jiu_map('五') := 5;
ling_jiu_map('六') := 6;
ling_jiu_map('七') := 7;
ling_jiu_map('八') := 8;
ling_jiu_map('九') := 9;
shibaiqian_map('') := 0;
shibaiqian_map('十') := 1;
shibaiqian_map('百') := 2;
shibaiqian_map('千') := 3;
wanyizhao_map('') := 0;
wanyizhao_map('万') := 1;
wanyizhao_map('亿') := 2;
wanyizhao_map('兆') := 3;
str := REGEXP_REPLACE(chivalue, '^十', '一十');
str := REGEXP_REPLACE(str, '零十', '零一十');
--将数字拆分为整数与浮点数两个数字数组
i := INSTR(str, '点', 1);
IF i = 0 THEN
integer_part := SUBSTR(str, 1);
ELSE
integer_part := SUBSTR(str, 1, i - 1);
float_part := SUBSTR(str, i + 1);
END IF;
--整型部分
x := LENGTH(integer_part);
str := '';
tmp := 0;
tmp2 := 0;
FOR k IN 1 .. x LOOP
str := SUBSTR(integer_part, k, 1);
IF str IN ('万', '亿', '兆') THEN
--当碰到万亿兆时
tmp := tmp + tmp2;
returnvalue := returnvalue + tmp * POWER(10000, wanyizhao_map(str));
tmp := 0;
tmp2 := 0;
ELSIF str IN ('十', '百', '千') THEN
--当碰到十百千时
tmp := tmp + tmp2 * POWER(10, shibaiqian_map(str));
tmp2 := 0;
ELSE
--当碰到数字时
tmp2 := ling_jiu_map(str);
END IF;
END LOOP;
--最后将没有小于万位数加到整数中去
tmp := tmp + tmp2;
returnvalue := returnvalue + tmp;
IF float_part IS NOT NULL THEN
--计算小数部分
k := 0;
tmp := '';
FOR k IN 1 .. LENGTH(float_part) LOOP
tmp := tmp || ling_jiu_map(SUBSTR(float_part, k, 1));
END LOOP;
returnvalue := returnvalue || '.' || tmp;
END IF;
RETURN returnvalue;
END;
--结束END--
本文标题: oracle中文数字转阿拉伯数字
本文链接: https://lsjlt.com/news/38043.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0