plsql小写金额转大写金额函数
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,create or replace function comm.F_upper_money(p_num in number default null)return nvarchar2 is/*Ver:
千家信息网最后更新 2026年11月03日plsql小写金额转大写金额函数
create or replace function comm.F_upper_money(p_num in number default null)
return nvarchar2 is
/*Ver:1.0 Created By xsb on 2003-8-18 For:
将金额数字(单位元)转换为大写(采用从低至高算法)
数字整数部分不得超过16位,可以是负数。
Ver:1.1 Modified By xsb on 2003-8-20 For:个位数处理也放在For循环中。
Ver:1.2 Modified By xsb on 2003-8-22 For:分后不带整字。
Ver:1.3 Modified By xsb on 2003-8-28 For:完善测试用例。
测试用例:
SET HEAD OFF
SET FEED OFF
select '无参数时='||f_upper_money() from dual;
select 'null='||f_upper_money(null) from dual;
select '0='||f_upper_money(0) from dual;
select '0.01='||f_upper_money(0.01) from dual;
select '0.126='||f_upper_money(0.126) from dual;
select '01.234='||f_upper_money(01.234) from dual;
select '10='||f_upper_money(10) from dual;
select '100.1='||f_upper_money(100.1) from dual;
select '100.01='||f_upper_money(100.01) from dual;
select '10000='||f_upper_money(10000) from dual;
select '10012.12='||f_upper_money(10012.12) from dual;
select '20000020.01='||f_upper_money(20000020.01) from dual;
select '3040506708.901='||f_upper_money(3040506708.901) from dual;
select '40005006078.001='||f_upper_money(40005006078.001) from dual;
select '-123456789.98='||f_upper_money(-123456789.98) from dual;
select '123456789123456789.89='||f_upper_money(123456789123456789.89) from dual;
*/
Result nvarchar2(100); --返回字符串
num_round nvarchar2(100) := to_char(abs(round(p_num, 2))); --转换数字为小数点后2位的字符(正数)
num_left nvarchar2(100); --小数点左边的数字
num_right nvarchar2(2); --小数点右边的数字
str1 nchar(10) := '零壹贰叁肆伍陆柒捌玖'; --数字大写
str2 nchar(16) := '元拾佰仟万拾佰仟亿拾佰仟万拾佰仟'; --数字位数(从低至高)
num_pre number(1) := 1; --前一位上的数字
num_current number(1); --当前位上的数字
num_count number := 0; --当前数字位数
begin
if p_num is null then
return null;
end if; --转换数字为null时返回null
select to_char(nvl(substr(to_char(num_round),
1,
decode(instr(to_char(num_round), '.'),
0,
length(num_round),
instr(to_char(num_round), '.') - 1)),
0))
into num_left
from dual; --取得小数点左边的数字
select substr(to_char(num_round),
decode(instr(to_char(num_round), '.'),
0,
length(num_round) + 1,
instr(to_char(num_round), '.') + 1),
2)
into num_right
from dual; --取得小数点右边的数字
if length(num_left) > 16 then
return '**********';
end if; --数字整数部分超过16位时
--采用从低至高的算法,先处理小数点右边的数字
if length(num_right) = 2 then
if to_number(substr(num_right, 1, 1)) = 0 then
result := '零' ||
substr(str1, to_number(substr(num_right, 2, 1)) + 1, 1) || '分';
else
result := substr(str1, to_number(substr(num_right, 1, 1)) + 1, 1) || '角' ||
substr(str1, to_number(substr(num_right, 2, 1)) + 1, 1) || '分';
end if;
elsif length(num_right) = 1 then
result := substr(str1, to_number(substr(num_right, 1, 1)) + 1, 1) || '角整';
else
result := '整';
end if;
--再处理小数点左边的数字
for i in reverse 1 .. length(num_left) loop
--(从低至高)
num_count := num_count + 1; --当前数字位数
num_current := to_number(substr(num_left, i, 1)); --当前位上的数字
if num_current > 0 then
--当前位上数字不为0按正常处理
result := substr(str1, num_current + 1, 1) ||
substr(str2, num_count, 1) || result;
else
--当前位上数字为0时
if mod(num_count - 1, 4) = 0 then
--当前位是元、万或亿时
result := substr(str2, num_count, 1) || result;
num_pre := 0; --元、万,亿前不准加零
end if;
if num_pre > 0 or length(num_left) = 1 then
--上一位数字不为0或只有个位时
result := substr(str1, num_current + 1, 1) || result;
end if;
end if;
num_pre := num_current;
end loop;
if p_num < 0 then
--转换数字是负数时
result := '负' || result;
end if;
return Result;
exception
when others then
raise_application_error(-20001, '数字转换大写出现错误!' || sqlerrm);
end;
数字
小数
小数点
处理
大写
位数
右边
个位
字符
整数
算法
负数
部分
测试
金额
个位数
单位
参数
只有
字符串
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技
科技互联网技术
互联网 的科技创新
互联网金融 科技创新
互联网 新科技
互联网前沿科技
重庆科技学院互联网
安控科技rtu产品工业互联网
互联网科技公司需要的职位
厦门千工互联网科技有限公司
互联网与医疗科技
中国互联网十大科技股排名
银行科技岗属于互联网吗
宇信科技在杭州互联网排第几
保山互联网科技靠谱吗
科技和互联网行业的特点
盐城市攀科互联网科技有限公司
科技互联网专业工作会议发言稿
承德科技产业互联网平台
重庆科技产业互联网有哪些
互联网佳科技有限公司
互联网科技公司税收优惠
关于新基建和互联网科技
成都狮子座互联网科技
互联网养老 桔豆科技
中化能源互联网科技招聘
互联网对科技的发展
南平创想时代互联网科技有限公司
华中科技大学互联网的牛人
国大互联网教育科技有限公司薪资