之前因公司业务需求,需要将录入的汉字自动转为阿拉伯数字存放到数据库中,网上有好多阿拉伯数字转为汉字的且正确的。但是汉字转为阿拉伯数字的却很少有正确的 。下面是正确的oracle函数,可正确转换汉字。(可转14位数左右,更大的数转换会有问题。)

create or replace function chineseTonum (chival IN VARCHAR2) return number
astype str_array is table of varchar2(10) index by binary_integer;
type num_array is table of number index by binary_integer;
type num_map is table of number index by varchar2(10);
rmb_numbers num_map;
unit_numbers str_array;
big_unit_numbers str_array;
unit_val_numbers num_array;
result Number :=0;
i integer;
ind integer := -1;
money VARCHAR2(200) ;
pre_money VARCHAR2(200) ;
n Number;
beginrmb_numbers('一') := 1;rmb_numbers('二') := 2;rmb_numbers('三') := 3;rmb_numbers('四') := 4;rmb_numbers('五') := 5;rmb_numbers('六') := 6;rmb_numbers('七') := 7;rmb_numbers('八') := 8;rmb_numbers('九') := 9;rmb_numbers('零') := 0;rmb_numbers('壹') := 1;rmb_numbers('贰') := 2;rmb_numbers('叁') := 3;rmb_numbers('肆') := 4;rmb_numbers('伍') := 5;rmb_numbers('陆') := 6;rmb_numbers('柒') := 7;rmb_numbers('捌') := 8;rmb_numbers('玖') := 9;rmb_numbers('整') := 0;unit_numbers(1) := '亿';unit_numbers(2) := '万';unit_numbers(3) := '千';unit_numbers(4) := '百';unit_numbers(5) := '十';unit_numbers(6) := '元';unit_numbers(7) := '角';unit_numbers(8) := '分';unit_numbers(9) := '厘';big_unit_numbers(1) := '億';big_unit_numbers(2) := '萬';big_unit_numbers(3) := '仟';big_unit_numbers(4) := '佰';big_unit_numbers(5) := '拾';big_unit_numbers(6) := '圆';big_unit_numbers(7) := '角';big_unit_numbers(8) := '分';big_unit_numbers(9) := '厘';unit_val_numbers(1) := 100000000;       unit_val_numbers(2) := 10000;           unit_val_numbers(3) := 1000;            unit_val_numbers(4) := 100;             unit_val_numbers(5) := 10;              unit_val_numbers(6) := 1;               unit_val_numbers(7) := 0.1;             unit_val_numbers(8) := 0.01;            unit_val_numbers(9) := 0.001;  money:= chival;if (money is null ) thenreturn result;end if;-- 9 是计量单位的长度for i in 1..unit_numbers.count loopind := instr(money, unit_numbers(i), -1 , 1);if ( ind = 0 ) then ind := instr(money, big_unit_numbers(i), -1 , 1);end if;if ( ind > 0 ) thenpre_money := substr(money,1,ind -1); money := substr(money,ind + 1);if ( pre_money is null and unit_val_numbers(i) = 10 ) thenresult := result + unit_val_numbers(i);elseresult := result + chi2num(pre_money) * unit_val_numbers(i); end if;end if;end loop;if (money is not null ) then n := rmb_numbers(money);if ( n is not null) then result := result + n;end if;end if;return result;
end;

将汉字转为阿拉伯数字(oracle函数方式)相关推荐

  1. 大写汉字转为阿拉伯数字

    /*** 大写汉字转为阿拉伯数字*/ public class ChineseChangeToNumber {/*** 中文简体*/public static final String[] RMB_N ...

  2. oracle数据库生成拼音码,Oracle中生成汉字拼音码的函数(转载)

    效果: select fgetpy('中国') FROM dual; 结果   zg CREATE OR REPLACE FUNCTION fgetpy (v_str VARCHAR2) RETURN ...

  3. python判断输入的是否为数字_python怎么判断是否为数字 将罗马数字转为阿拉伯数字,用python解...

    将阿拉伯数字转为罗马数字,用python解 class Solution(object): def intToRoman(self, num): """ :type nu ...

  4. oracle tochar 格式 ¥,ORACLE函数TO_CHAR以及数字转换格式

    ORACLE函数TO_CHAR以及数字转换格式 数点,则要和D配合使用,不能和点号配合. 11 L(本地货币符号) 'L999' 是C的本地版本.可以放在整个格式的最前面和最后面. TO_CHAR(1 ...

  5. Oracle函数介绍:decode

    1.Oracle函数介绍:decode   Sql代码  select sum(DECODE(C810000125,'是',1,0))/COUNT(1) 合格率 FROM t581 统计合格率,如果 ...

  6. oracle函数建立码值,Oracle函数与存储过程

    1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 D ...

  7. 【实例】PHP如何实现汉字转为拼音的?

    php汉字转拼音本次使用的是 overtrue/pinyin 扩展.基于 CC-CEDICT 词典的中文转拼音工具,更准确的支持多音字的汉字转拼音解决方案. 一.安装 1.使用 Composer 安装 ...

  8. 中文汉字转阿拉伯数字

    1.中文汉字转阿拉伯数字 参考 思路:地位向高位遍历,每遇到一个数,乘以当前单位,累加在 res 上,遇到单位则改变当前单位 //可以处理十万以下 public class change {publi ...

  9. oracle创建编号函数,oracle函数初次尝试

    初次着手写function,确实费了好长时间,一个if就需要有个end  if ,并且else必须和if一起使用,可以直接对传进来的参数使用oracle自带的函数进行处理,并直接做做判断条件. 需求根 ...

最新文章

  1. usaco snail trails(dfs)
  2. 两栏布局,三栏布局,等高布局,流式布局
  3. 移动对meta的定义
  4. Android怎样保证一个线程最多仅仅能有一个Looper?
  5. [翻译] NSRegexTester
  6. Kotlin中的接口回调
  7. list 是什么意思 php,php中list的功能是什么
  8. java RPC 初步了解
  9. 五个 .NET 性能小贴士
  10. lts安装 rust ubuntu_一起学Rust编程「1」:开发环境
  11. 数据库工作笔记009---linux 导入导出postgresql数据库
  12. 如果你人生的第一目标是赚钱
  13. jlabel 不能连续两次set_请问一个JAVA中JLabel的setFont()问题?
  14. Tableau实战 楼市降温分析(七)现期房销售额及累计增长
  15. Aspnet Mvc 前后端分离项目手记(二)关于token认证
  16. C++ 惯用法之 Nifty Counter
  17. sql server XML中value(),exists(),nodes()方法
  18. 计算机ram和rom的特点的是,什么是ROM和RAM?它们各有什么特点?
  19. LeetCode 6036. 构造字符串的总得分和
  20. php bloginfo templatedirectory,lt;?phpbloginfo(#39;template_directory#39;);?这句标签什么意思?...

热门文章

  1. 向win7旗舰版U盘启动盘 添加usb3.0driver
  2. DWGTool Acme CAD Converter 2020中文版
  3. 配置 Nginx 和 frps 共存 80/443 端口及泛域名支持教程
  4. Python机器学习:train_test_split()划分数据集
  5. 计算机网络实验仿真系统设计,计算机网络安全实验仿真系统
  6. 计算机网络--自定向下方法(配套资源)
  7. 一招教你免费提取PDF中的文字
  8. win7需要计算机管理员权限,Win7系统提示“需要管理员权限”该如何解决?
  9. 一进入页面选中第一个按钮,并展示按钮下的数据
  10. xp使用4G内存方法