Oracle实现小写金额转换成大写的方法

Oracle实现小写金额转换成大写的方法,代码如下:
CREATE OR REPLACE FUNCTION convert_money(n_LowerMoney IN NUMBER,
                                         v_TransType  IN NUMBER DEFAULT 1 -- 1: directly translate, 0: read it in words
                                         ) 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;

  IF v_TransType = 0 then
    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, 零零, 零);
  END IF;

  -- 对壹元以下的金额的处理
  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 convert_money;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值