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;

转载于:https://blog.51cto.com/sparkkang/1768030

oracle中文数字转阿拉伯数字相关推荐

  1. 阿拉伯数字中文oracle,【oracle】中文数字转阿拉伯数字

    简体中文数字转阿拉伯数字,分为两个存储过程,一个是处理小数位的,一个是处理整数位的,加入部分检错处理,没有穷举所有非法输入,支持数据大小为:number型支持到多少就支持到多少,这是个写得比较好的转换 ...

  2. python数字转中文字符_Python实现中文数字转换为阿拉伯数字的方法示例

    本文实例讲述了Python实现中文数字转换为阿拉伯数字的方法.分享给大家供大家参考,具体如下: 一.需求 今天写了三千二百行代码. 今天写了3200行代码. 两行意思相同,只是表达方式不太能够,统一掉 ...

  3. python数字转换_Python实现中文数字转换为阿拉伯数字的方法示例

    本文实例讲述了Python实现中文数字转换为阿拉伯数字的方法.分享给大家供大家参考,具体如下: 一.需求 今天写了三千二百行代码. 今天写了3200行代码. 两行意思相同,只是表达方式不太能够,统一掉 ...

  4. 中文数字与阿拉伯数字转换(Python)

    cn2an 是一个快速转化 中文数字 和 阿拉伯数字 的工具包 相关链接 cn2an工具包Github地址 在线测试平台 install git clone https://github.com/Ai ...

  5. android数字转汉字,【原创】最精简的中文数字和阿拉伯数字互相转换函数

    public class ChineseNumUtils { /** * 中文数字转阿拉伯数字 * (长度不能超过long最大值) * * @param chNum 中文数字 * @return 阿拉 ...

  6. java中文数字与阿拉伯数字相互转换

    最近有一个业务需要用到中文数字与阿拉伯数字相互转换,废话不多说直接上代码. 中文数字/阿拉伯数字互转第一次完善:https://blog.csdn.net/qq_26896085/article/de ...

  7. c# 中文数字转阿拉伯数字

    最近迷上了看网络小说,手机上的小说阅读器全都是收费的,所以决定下载下载再导入到手机上,可是能下载到的现成的TXT格式小说全都被打了广告,仔细看的时候像一些"首"."发&q ...

  8. cn2.php中文,Python使用cn2an实现中文数字与阿拉伯数字的相互转换

    工作中经常遇到阿拉伯数字转换称为中文数字或者大写金额,在网上搜了下,cn2an口碑较好,遂进行了一番学习. 安装 pip install cn2an 依赖库为setuptools.PyYAML 查看版 ...

  9. 使用cn2an实现中文数字与阿拉伯数字的相互转换

    工作中经常遇到阿拉伯数字转换称为中文数字或者大写金额,在网上搜了下,cn2an口碑较好,遂进行了一番学习. 安装 pip install cn2an 依赖库为setuptools.PyYAML 查看版 ...

最新文章

  1. 服务器架设笔记——编译Apache及其插件
  2. java dao层_JavaWeb Dao层架构设计
  3. QT的QNetworkAccessManager类的使用
  4. linux之awk命令学习笔记
  5. unity 编辑器扩展 扩展摄像机的属性查看器
  6. 前端学习(1710):前端系列javascript之uniapp介绍
  7. java获取网络图片_有了这50套Java毕设项目(源码 案例),offer拿到手软,无偿分享...
  8. Git上传文件到GitHub失败问题解决
  9. 2017计算机基础教学大纲,2017级大学计算机基础教学大纲
  10. “内心强大的人”依然会被移出首页
  11. python部落课程资源_python部落刷题宝学到的内置函数
  12. energy plus matlab,Energyplus教程系列1—Energyplus到底能干啥.ppt
  13. Android手机安装.pem证书文件
  14. andserver FileBrowser 图片浏览
  15. 小博老师解读经典Java面试题—Java位运算
  16. Centos8 安装 MySQL8.0.26
  17. 洛谷 P3518 [POI2011] SEJ-Strongbox 题解
  18. 苹果8plus什么用计算机,iphone8plus怎么把手机投屏到电脑显示器
  19. 笑出腹肌的 Emoji 表情符号,你值得拥有
  20. 资料员培训建筑八大员培训资料员港航工程资料管理存在的问题

热门文章

  1. 一、C语言结构体数组
  2. linux基本功系列之uniq命令实战
  3. jQuery:设置获取属性、遍历添加删除元素、尺寸、位置
  4. 电路分析 极简复习指导、公式推导、常用结论归纳 第三章 电阻电路的一般分析
  5. 通俗易懂讲解均方误差 (MSE)
  6. 基于粤嵌gec6818开发板嵌入式开发电子相册,音乐播放,视频播放,2048游戏
  7. 服务器安装 Centos7 时引导错误以及解决方案(报错:no such device)
  8. 依协变量(time-dependent covariables) 兼谈分层Cox回归 依时变量
  9. 编码器+EasyDSS平台如何实现异地公网大屏同屏直播?
  10. 日语键盘的Macbook如何输入英文反斜线('\')