最近现场客户提了一个奇葩的需求,某个表存放的是人民币大写金额,现在需要对大写金额进行统计,后来想了想,用MYSQL来实现吧。百度了好多资料,要么言不达意,要么需要开通VIP,于是一想,还不如自己写呢。经过半个晚上的编写与调试,终于大功告成。

这个功能由两个函数组成,func_get_rmb_xx是主函数,func_get_rmb_xx_qian是主函数调用的子函数,支持0.01至9999亿的数据范围,足够满足日常需求,希望能帮助各位码农。

-- 主函数部分

CREATE  FUNCTION `func_get_rmb_xx`(v_rmb_dx VARCHAR ( 200 )) RETURNS varchar(20) CHARSET utf8
-- 人民币大写转小写
BEGIN
    DECLARE v_rmb_xx decimal(18,2);-- 小写总计
    DECLARE v_rmb_xx_wan decimal(18,2);-- 小写万
    DECLARE v_rmb_xx_yi decimal(18,2);-- 小写亿
    DECLARE v_rmb_xx_yuan decimal(18,2);-- 小写元
    set v_rmb_xx =0;
    -- 数据预处理
    set v_rmb_dx=REPLACE(v_rmb_dx,'一','壹');
    set v_rmb_dx=REPLACE(v_rmb_dx,'二','贰');
    set v_rmb_dx=REPLACE(v_rmb_dx,'三','叁');
    set v_rmb_dx=REPLACE(v_rmb_dx,'四','肆');
    set v_rmb_dx=REPLACE(v_rmb_dx,'五','伍');
    set v_rmb_dx=REPLACE(v_rmb_dx,'六','陆');
    set v_rmb_dx=REPLACE(v_rmb_dx,'七','柒');
    set v_rmb_dx=REPLACE(v_rmb_dx,'八','捌');
    set v_rmb_dx=REPLACE(v_rmb_dx,'九','玖');
    set v_rmb_dx=REPLACE(v_rmb_dx,'千','仟');
    set v_rmb_dx=REPLACE(v_rmb_dx,'百','佰');
    set v_rmb_dx=REPLACE(v_rmb_dx,'整','');
    set v_rmb_dx=REPLACE(v_rmb_dx,'园','元');
    set v_rmb_dx=REPLACE(v_rmb_dx,'圆','元');
    set v_rmb_xx=0;
    -- 获取亿之前的字段
    if LOCATE('亿',v_rmb_dx) then
      insert into text_table (name,VALUE) VALUEs('亿',substring_index(v_rmb_dx,'亿',1));
        set v_rmb_xx=v_rmb_xx+func_get_rmb_xx_qian(substring_index(v_rmb_dx,'亿',1))*100000000;
        set v_rmb_dx=substring_index(v_rmb_dx,'亿',-1);
    end if;
-- 获取万的数值
    if LOCATE('万',v_rmb_dx) then
      insert into text_table (name,VALUE) VALUEs('万',substring_index(v_rmb_dx,'万',1));
        set v_rmb_xx=v_rmb_xx+func_get_rmb_xx_qian(substring_index(v_rmb_dx,'万',1))*10000;
        set v_rmb_dx=substring_index(v_rmb_dx,'万',-1);
    end if;
            -- 获取元万之前的字段
    if v_rmb_dx is not null then
      set v_rmb_xx=v_rmb_xx+func_get_rmb_xx_qian(v_rmb_dx);
        insert into text_table (name,VALUE) VALUEs('元',v_rmb_dx);
    end if;
    RETURN v_rmb_xx;

END

-- 子函数部分

CREATE   FUNCTION `func_get_rmb_xx_qian`(v_rmb_dx VARCHAR ( 200 )) RETURNS varchar(20) CHARSET utf8
BEGIN
    DECLARE v_rmb_xx decimal(18,2);
    DECLARE v_rmb_xx_temp decimal(18,2);
    declare v_rmb_dx_temp VARCHAR(10);
    declare v_rmb_dx_temp_next VARCHAR(10);
    declare i int ;
    DECLARE length int;
    set v_rmb_xx =0;

set i=1;
    -- 获取汉字的长度
    set length=char_LENGTH(v_rmb_dx);
    while i<=length do
      set v_rmb_dx_temp=SUBSTRING(v_rmb_dx,i,1);
    if v_rmb_dx_temp ='壹'  or v_rmb_dx_temp ='贰'  or v_rmb_dx_temp ='叁'  or  v_rmb_dx_temp ='肆'  or v_rmb_dx_temp ='伍' or  v_rmb_dx_temp ='陆' or v_rmb_dx_temp ='柒' or  v_rmb_dx_temp ='捌' or v_rmb_dx_temp ='玖' then
          if v_rmb_dx_temp ='壹'  then
               set v_rmb_xx_temp =1;
            elseif v_rmb_dx_temp ='贰'  then
               set v_rmb_xx_temp =2;
            elseif v_rmb_dx_temp ='叁'  then
               set v_rmb_xx_temp =3;
            elseif v_rmb_dx_temp ='肆'  then
               set v_rmb_xx_temp =4;
            elseif v_rmb_dx_temp ='伍'  then
               set v_rmb_xx_temp =5;
            elseif v_rmb_dx_temp ='陆'  then
               set v_rmb_xx_temp =6;
            elseif v_rmb_dx_temp ='柒'  then
               set v_rmb_xx_temp =7;
            elseif v_rmb_dx_temp ='捌'  then
               set v_rmb_xx_temp =8;
            elseif v_rmb_dx_temp ='玖'  then
               set v_rmb_xx_temp =9;
            end if;
            insert into text_table (name,VALUE) VALUEs('v_rmb_xx_temp',v_rmb_xx_temp);
            set i=i+1;
          set v_rmb_dx_temp_next=SUBSTRING(v_rmb_dx,i,1);
            if v_rmb_dx_temp_next='佰' then
                    set v_rmb_xx_temp=v_rmb_xx_temp*100;
            end if;
            if v_rmb_dx_temp_next='拾' then
                    set v_rmb_xx_temp=v_rmb_xx_temp*10;
            end if;
            if v_rmb_dx_temp_next='仟' then
                    set v_rmb_xx_temp=v_rmb_xx_temp*1000;
            end if;
            if v_rmb_dx_temp_next='角' then
                    set v_rmb_xx_temp=v_rmb_xx_temp*0.1;
            end if;
            if v_rmb_dx_temp_next='分' then
                    set v_rmb_xx_temp=v_rmb_xx_temp*0.01;
            end if;
            set v_rmb_xx = v_rmb_xx+v_rmb_xx_temp;
             insert into text_table (name,VALUE) VALUEs('v_rmb_xx',v_rmb_xx);
        end if;
        set i=i+1;
    end while;
    RETURN v_rmb_xx;

END

MYSQL 人民币大写金额转小写相关推荐

  1. 《转载+完善》java实现中文大写金额转小写数字

    java实现中文大写金额转小写数字 原文地址:https://blog.csdn.net/Moneywa/article/details/97233159 上面原文博客,在处理 "叁拾壹亿叁 ...

  2. C#转换人民币大写金额

    /// <summary>/// 转换人民币大写金额./// </summary>public class RMBConverter{/// <summary>// ...

  3. 人民币大写转小写,及人民币格式判断

    第一种方式 package com.sinux.qunz.utils; import java.io.Serializable; import java.util.regex.Matcher; imp ...

  4. Excel 数值转换为人民币大写金额字符串

    把$B$27单元格中的数值转换为人民币大写金额字符串: 目标单元格填入以下公式: =IF($B$27=0,CONCATENATE(IF($B$27<=0,,TEXT(INT($B$27),&qu ...

  5. C#数字金额转人民币大写金额的实现

    要过年了,朋友圈里充斥着各种年的味道,还有一种特别的朋友圈今年格外显眼,好像一股气流冲击着我的小心脏,2022真的是太难了. 这里,专门为各位老板写了一套数字金额转人民币大写金额的实现方法,希望大家都 ...

  6. python小程序_小会计的实用Python小程序(三):人民币大写金额转换器

    大家好,我是Susie. 作为一只财务狗,平时难免要给客户出具一些收款单,在我国收款单上往往会有一个叫"大写金额"的东西,比如收款9,876,543,210.12元,我们就要在收款 ...

  7. 如何把大写金额变为小写数字_怎样将带有小数点的小写数字转化为大写

    Excel要将人民币小写金额转换成大写格式,将自定义格式类型中的"G/通用格式"改为G/通用格式"元"" 来实现.但在转换小数时却出现了问题,比如12 ...

  8. 人民币大写转换小写数字金额 ts/es6

    /* 这里的金额 只到千万 不含亿元转换 */ /** 如果有亿元 算法和以下一样 加几步就是 */ /**想法: 把金额拆分三个数组分别计算 1. 以万结束为一个2. 以元结束为一个3. 小数 角分 ...

  9. python实现人民币金额大写转小写数字

    支持万亿以内的转换,如果你有超出这个范围的钱,给我亿点点,求你了! import redef aoligeiganle(amount):chinese_num = {'零': 0, '壹': 1, ' ...

  10. 大写金额转小写(千万以下)

    这里使用字典来保存大小写的对应关系,其中"万"."零"."整"是特殊字符,需要判断处理 def hantonum(str1): dict1 ...

最新文章

  1. 【bzoj3924】[Zjoi2015]幻想乡战略游戏 动态点分治
  2. Windows环境下搭建rocketMQ环境
  3. pandas(四) -- 数值计算
  4. SAP 电商云 Spartacus UI CheckoutDeliveryService 的单元测试设计
  5. java nosql_Java EE的NoSQL的未来
  6. BugkuCTF-MISC题MuMuMisc的简单题
  7. 最短路径BFS算法matlab,迷宫的最短路径 bfs算法
  8. php 未定义数组索引_如何删除PHP数组元素键值并重新排序
  9. 检验成果的软指标与硬指标
  10. u3d商业级开心消消乐源码开发总结
  11. 2020年美赛C题(数据分析题)O奖论文笔记 (2)
  12. android菜单对话框文字,Android 对话框、信息提示和菜单
  13. linux远程桌面太卡,确保远程桌面管理顺畅稳定的方法
  14. .NetCore异常:Could not load file or assembly ‘Microsoft.AI.Web‘ or one of its dependencies. The system
  15. 推荐.Net、C# 逆向反编译四大工具利器(请勿用来非法行为)
  16. win10只有c盘怎么分区_win10系统硬盘怎么分区
  17. 微信公众号音乐html,如何在微信公众号文章内插入音频及样式?
  18. 如何去利用MindManager 2020绘制逻辑思维导图呢?
  19. 2022年武汉中级工程师职称评审要求是什么?可以代评吗?甘建二
  20. java解决魔方阵(奇数阶)问题(适合小白!保会)

热门文章

  1. 八数码问题c语言,八数码问题的可解性
  2. 让你的网站用上炫酷的中文字体
  3. matlab 元胞数组
  4. C#可用的RSA公钥加密私钥解密以及私钥加密公钥解密,支持2048
  5. 在计算机网络中软件资源共享是指,在计算机网络中,软件资源共享指的是什么...
  6. 51单片机实战教程基础硬件篇(三 51单片机开发板设计)
  7. textpattern将添加后台theme功能
  8. testbench——信号的产生
  9. dx11 将纹理保存到dds
  10. 短时傅里叶变换程序实现