MYSQL 人民币大写金额转小写
最近现场客户提了一个奇葩的需求,某个表存放的是人民币大写金额,现在需要对大写金额进行统计,后来想了想,用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 人民币大写金额转小写相关推荐
- 《转载+完善》java实现中文大写金额转小写数字
java实现中文大写金额转小写数字 原文地址:https://blog.csdn.net/Moneywa/article/details/97233159 上面原文博客,在处理 "叁拾壹亿叁 ...
- C#转换人民币大写金额
/// <summary>/// 转换人民币大写金额./// </summary>public class RMBConverter{/// <summary>// ...
- 人民币大写转小写,及人民币格式判断
第一种方式 package com.sinux.qunz.utils; import java.io.Serializable; import java.util.regex.Matcher; imp ...
- Excel 数值转换为人民币大写金额字符串
把$B$27单元格中的数值转换为人民币大写金额字符串: 目标单元格填入以下公式: =IF($B$27=0,CONCATENATE(IF($B$27<=0,,TEXT(INT($B$27),&qu ...
- C#数字金额转人民币大写金额的实现
要过年了,朋友圈里充斥着各种年的味道,还有一种特别的朋友圈今年格外显眼,好像一股气流冲击着我的小心脏,2022真的是太难了. 这里,专门为各位老板写了一套数字金额转人民币大写金额的实现方法,希望大家都 ...
- python小程序_小会计的实用Python小程序(三):人民币大写金额转换器
大家好,我是Susie. 作为一只财务狗,平时难免要给客户出具一些收款单,在我国收款单上往往会有一个叫"大写金额"的东西,比如收款9,876,543,210.12元,我们就要在收款 ...
- 如何把大写金额变为小写数字_怎样将带有小数点的小写数字转化为大写
Excel要将人民币小写金额转换成大写格式,将自定义格式类型中的"G/通用格式"改为G/通用格式"元"" 来实现.但在转换小数时却出现了问题,比如12 ...
- 人民币大写转换小写数字金额 ts/es6
/* 这里的金额 只到千万 不含亿元转换 */ /** 如果有亿元 算法和以下一样 加几步就是 */ /**想法: 把金额拆分三个数组分别计算 1. 以万结束为一个2. 以元结束为一个3. 小数 角分 ...
- python实现人民币金额大写转小写数字
支持万亿以内的转换,如果你有超出这个范围的钱,给我亿点点,求你了! import redef aoligeiganle(amount):chinese_num = {'零': 0, '壹': 1, ' ...
- 大写金额转小写(千万以下)
这里使用字典来保存大小写的对应关系,其中"万"."零"."整"是特殊字符,需要判断处理 def hantonum(str1): dict1 ...
最新文章
- 【bzoj3924】[Zjoi2015]幻想乡战略游戏 动态点分治
- Windows环境下搭建rocketMQ环境
- pandas(四) -- 数值计算
- SAP 电商云 Spartacus UI CheckoutDeliveryService 的单元测试设计
- java nosql_Java EE的NoSQL的未来
- BugkuCTF-MISC题MuMuMisc的简单题
- 最短路径BFS算法matlab,迷宫的最短路径 bfs算法
- php 未定义数组索引_如何删除PHP数组元素键值并重新排序
- 检验成果的软指标与硬指标
- u3d商业级开心消消乐源码开发总结
- 2020年美赛C题(数据分析题)O奖论文笔记 (2)
- android菜单对话框文字,Android 对话框、信息提示和菜单
- linux远程桌面太卡,确保远程桌面管理顺畅稳定的方法
- .NetCore异常:Could not load file or assembly ‘Microsoft.AI.Web‘ or one of its dependencies. The system
- 推荐.Net、C# 逆向反编译四大工具利器(请勿用来非法行为)
- win10只有c盘怎么分区_win10系统硬盘怎么分区
- 微信公众号音乐html,如何在微信公众号文章内插入音频及样式?
- 如何去利用MindManager 2020绘制逻辑思维导图呢?
- 2022年武汉中级工程师职称评审要求是什么?可以代评吗?甘建二
- java解决魔方阵(奇数阶)问题(适合小白!保会)