函数实现:人民币小写转换成发票大写方式

本文介绍了一个实用的数据库函数,该函数能够将人民币的小写数值转换为发票上使用的大写形式。通过解析数字并替换特定字符,确保了输出格式符合中国会计标准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用数据库的函数,实现人民币小写转换成发票大写方式:

CREATE OR REPLACE FUNCTION L2U -- 小写金额转换成大写
(
    n_LowerMoney 
IN NUMBER
)
RETURN VARCHAR2
AS
v_LowerStr 
VARCHAR2(200); -- 小写金额
v_UpperPart VARCHAR2(200);
v_UpperStr 
VARCHAR2(200); -- 大写金额
BEGIN
v_LowerStr :
= LTRIM(RTRIM(TO_CHAR(ROUND(n_LowerMoney,2),'9999999999999.99')));
IF SUBSTR(v_LowerStr,1,1= '#' THEN
RETURN '转换金额超过计算范围(计算范围为:计算范围为: 0 - 9,999,999,999,999.99)';
END IF;
FOR I IN 1 .. LENGTH(v_LowerStr) LOOP
SELECT DECODE(SUBSTR(v_LowerStr,LENGTH(v_LowerStr) - I + 1,1),
'.','',
'0','''1','''2','''3','''4',''
'5','''6','''7','''8','''9','')||
DECODE(I,
1,'',2,'',3,NULL,4,NULL,5,'',6,'',7,'',8,'',
9,'',10,'',11,'',12,'亿',13,'',14,'',15,'',16,'',NULL)
INTO v_UpperPart FROM DUAL;
v_UpperStr :
= v_UpperPart||v_UpperStr;
END LOOP;

v_UpperStr :
= REPLACE(v_UpperStr,'零拾','');
v_UpperStr :
= REPLACE(v_UpperStr,'零佰','');
v_UpperStr :
= REPLACE(v_UpperStr,'零仟','');
v_UpperStr :
= REPLACE(v_UpperStr,'零零零','');
v_UpperStr :
= REPLACE(v_UpperStr,'零零','');
v_UpperStr :
= REPLACE(v_UpperStr,'零角零分','');
v_UpperStr :
= REPLACE(v_UpperStr,'零分','');
v_UpperStr :
= REPLACE(v_UpperStr,'零角','');
v_UpperStr :
= REPLACE(v_UpperStr,'零亿零万零元','亿元');
v_UpperStr :
= REPLACE(v_UpperStr,'亿零万零元','亿元');
v_UpperStr :
= REPLACE(v_UpperStr,'零亿零万','亿');
v_UpperStr :
= REPLACE(v_UpperStr,'零万零元','万元');
v_UpperStr :
= REPLACE(v_UpperStr,'万零元','万元');
v_UpperStr :
= REPLACE(v_UpperStr,'零亿','亿');
v_UpperStr :
= REPLACE(v_UpperStr,'零万','');
v_UpperStr :
= REPLACE(v_UpperStr,'零元','');
v_UpperStr :
= REPLACE(v_UpperStr,'零零','');

-- 对壹元以下的金额的处理
v_UpperStr := LTRIM(LTRIM(LTRIM(LTRIM(v_UpperStr,''),''),''),'');
IF SUBSTR(v_UpperStr,1,1= '' THEN
v_UpperStr :
= '零元整';
END IF;
RETURN v_UpperStr;
EXCEPTION 
WHEN OTHERS THEN 
RETURN '发生错误: '||SQLCODE||'--'||SQLERRM;
END L2U;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值