首页 > 其他分享 >人民币大写转换

人民币大写转换

时间:2023-01-19 13:44:49浏览次数:35  
标签:sell srmb 转换 -- when 大写 num end 人民币

CREATE OR REPLACE FUNCTION num2rmb(je NUMBER) RETURN VARCHAR2 IS
result varchar2(100);
i pls_integer;
snum varchar2(20) := ltrim(replace(to_char(abs(je), '9999999999999990.99'), '.'));
len pls_integer := length(snum);
sch varchar2(40) := '零壹贰叁肆伍陆柒捌玖';
sjin varchar2(150) := '分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟';
srmb varchar2(100):= '';
num pls_integer;
jin varchar(2);
s_num pls_integer := 0; --'0'起始位置
e_num pls_integer := 0; --'0'结束位置
begin
for i in 1..len loop
num := to_number(substr(snum, i, 1));
if num <> 0 then --非'0'时处理:
if s_num = 0 then
srmb := srmb||substr(sch, num + 1, 1)||substr(sjin, len - i + 1, 1); --前面字符非'0', 正常联接...
else
srmb := srmb|| --否则:
case when s_num = e_num then --前面只有一个'0'
case s_num when 7 then '万' --只处理进位
when 11 then '亿'
when 15 then '万' end
when e_num < 12 then --否则(多个'0'处理)
case when s_num < 7 then '' --万以内..
when s_num < 11 then case when e_num < 8 and s_num < 10 then '万' end
when s_num < 15 then case when e_num < 12 then '亿' end
else '万亿' end
when e_num < 16 and s_num > 14 then '万' end||
case when s_num > 3 and e_num < 3 then '圆零'
when e_num = 3 then '圆'
when e_num not in (7, 11, 15) or s_num - e_num > 2 then '零' end;
srmb := srmb||substr(sch, num + 1, 1)||substr(sjin, len - i + 1, 1);
end if;
s_num := 0;
e_num := 0;
else if s_num = 0 then --当s_num = 0时'0'串起始,
s_num := len - i + 1; --记录开始
e_num := s_num; --各结整位置。
else
e_num := len - i + 1; --否则新的结整位置。
end if;
end if;
end loop;
if s_num <>0 then --此时以'0'结尾
srmb := srmb||
case when s_num = len then '零圆整' --全'0'串,加...
when s_num = 1 or s_num = 2 then '整' --分(1),角(2)后加...
when s_num < 7 or s_num = 10 then '圆整'
when s_num <11 then '万圆整' 
when s_num <15 then '亿圆整'
else '万亿圆整' end;
else
srmb := srmb||'整'; --不以'0'结尾,加...
end if;
if je < 0 then
srmb:='负'||srmb;
end if;
RETURN srmb;
end num2rmb;
SQL> select num2rmb(12.345) as 大写 from dual;
大写
---------------------------------
壹拾贰圆叁角伍分整
-------------------------------------------------------练习1--------------------------------------------
SQL> create table tb_shop_sell
2 (
3 id number primary key,
4 shopid varchar2(10) not null,
5 price number(6,2) not null,
6 quantity number(2) not null
7 );
Table created
SQL> insert into tb_shop_sell values(1,'s001',1200,1);
1 row inserted
SQL> insert into tb_shop_sell values(2,'s002',1300,1);
1 row inserted
SQL> insert into tb_shop_sell values(3,'s003',23.4,3);
1 row inserted
SQL> insert into tb_shop_sell values(4,'s004',73.4,2);
1 row inserted
SQL> insert into tb_shop_sell values(5,'s005',23,1);
1 row inserted
SQL> create view v_sell 
2 as
3 select 
4 shopid 商品编号,
5 price 商品单价,
6 quantity 数量,
7 price*quantity 销售总额,
8 num2rmb(price*quantity) 销售总额大写
9 from tb_shop_sell;
SQL> select * from v_sell;
商品编号 商品单价 数量 销售总额 销售总额大写
---------- -------- ---- ---------- ---------------------------------
s001 1200.00 1 1200 壹仟贰佰圆整
s002 1300.00 1 1300 壹仟叁佰圆整
s003 23.40 3 70.2 柒拾圆贰角整
s004 73.40 2 146.8 壹佰肆拾陆圆捌角整
s005 23.00 1 23 贰拾叁圆整

标签:sell,srmb,转换,--,when,大写,num,end,人民币
From: https://www.cnblogs.com/ivenlin/p/17061356.html

相关文章

  • Java命名规则 方法名用驼峰 ;类首字母大写;方法全小写
    类命名规则 1.由字母、下划线、美元符号和数字组成,长度不限 2、首字符不能是数字3、不能是关键字4、不能是true、false和null,尽管这三个不是关键字5、区分大小写的......
  • ofd怎样转换成图片?ofd转换图片方法分享!​
    ofd怎样转换成图片?众所周知ofd文件不太好打开,需要我们使用相关的阅读器才可以,而且,对于编辑也是比较困难的,日常我们进行处理的时候,往往手足无措的,那么我们最好的方法就是将......
  • 【2023.01.19】PVE部署openwrt,并转换磁盘
    将iso文件上传到PVE里头后创建虚拟机在PVE的shell里面qmimportdisk103/var/lib/vz/template/iso/openwrt5.15.imglocal-lvm103是虚拟机号,后面是上传路径和......
  • 数据类型的转换
    #数据类型转换#万物皆可转字符串,字符串要想转成数字必须确保字符串里面的内容均是数字才行x=6int(x)#将数字类型转换成字符串num_str=str(11)print(type(num......
  • ⼗六进制字符串与数值类型之间转换
    stringinput="HelloWorld!";char[]values=input.ToCharArray();foreach(charletterinvalues){//Gettheintegralvalueofthecharacter.intvalue=......
  • python基础: 数据类型及其内置方法、类型转换
    目录基本数据类型数据类型的概述1.数据类型之整形--int2.数据类型之浮点型--float3.数据类型之字符型,也称字符串类型--str4.数据类型之列表--list5.数据类型之字典--dict6.......
  • AcWing1075. 数字转换
    题目描述如果一个数\(x\)的约数之和\(y\)(不包括他本身)比他本身小,那么\(x\)可以变成\(y\),\(y\)也可以变成\(x\)例如,\(4\)可以变为\(3\),\(1\)可以变为\(7\)。......
  • 17th Jan HJ5 进制转换
    写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。数据范围:保证结果在1\len\le2^{31}-1\1≤n≤231−1输入描述:输入一个十六进制的数值字符串。输出描述......
  • java:日期工具类,是否是闰年,获取当前日期的前后一天,月,年,获得日期的年月日时分秒,string与
    java:日期工具类,获取当前日期的前后一天,月,年,获得日期的年月日时分秒,string与date之间转换。这里写目录标题​​java:日期工具类,获取当前日期的前后一天,月,年,获得日期的年月日时......
  • 小满nestjs(第十八章 nestjs 管道转换)
    管道可以做两件事1.转换,可以将前端传入的数据转成成我们需要的数据2.验证类似于前端的rules配置验证规则我们先来讲一下转换Nestjs提供了八个内置转换API​​Validatio......