oracle中将数字金额转换为中文大写函数

oracle中有一个将数字金额转换为中文形式的内部函数 money_to_chinese

此方法出处:http://hi.baidu.com/hangdoudou/blog/item/82e2c36ec001ecde80cb4a65.html

Sql代码
  1. CREATE OR REPLACE FUNCTION money_to_chinese (money IN VARCHAR2)   
  2.    RETURN VARCHAR2   
  3. IS  
  4.    c_money    VARCHAR2 (12);   
  5.    m_string   VARCHAR2 (60) := '分角圆拾佰仟万拾佰仟亿';   
  6.    n_string   VARCHAR2 (40) := '壹贰叁肆伍陆柒捌玖';   
  7.    b_string   VARCHAR2 (80);   
  8.    n          CHAR;   
  9.    len        NUMBER (3);   
  10.    i          NUMBER (3);   
  11.    tmp        NUMBER (12);   
  12.    is_zero    BOOLEAN;   
  13.    z_count    NUMBER (3);   
  14.    l_money    NUMBER;   
  15.    l_sign     VARCHAR2 (10);   
  16. BEGIN  
  17.    l_money := ABS (money);   
  18.   
  19.    IF money < 0   
  20.    THEN  
  21.       l_sign := '负';   
  22.    ELSE  
  23.       l_sign := '';   
  24.    END IF;   
  25.   
  26.    tmp := ROUND (l_money, 2) * 100;   
  27.    c_money := RTRIM (LTRIM (TO_CHAR (tmp, '999999999999')));   
  28.    len := LENGTH (c_money);   
  29.    is_zero := TRUE;   
  30.    z_count := 0;   
  31.    i := 0;   
  32.   
  33.    WHILE i < len   
  34.    LOOP   
  35.       i := i + 1;   
  36.       n := SUBSTR (c_money,   
  37.                    i,   
  38.                    1   
  39.                   );   
  40.   
  41.       IF n = '0'  
  42.       THEN  
  43.          IF len - i = 6 OR len - i = 2 OR len = i   
  44.          THEN  
  45.             IF is_zero   
  46.             THEN  
  47.                b_string := SUBSTR (b_string,   
  48.                                    1,   
  49.                                    LENGTH (b_string) - 1   
  50.                                   );   
  51.                is_zero := FALSE;   
  52.             END IF;   
  53.   
  54.             IF len - i = 6   
  55.             THEN  
  56.                b_string := b_string || '万';   
  57.             END IF;   
  58.   
  59.             IF len - i = 2   
  60.             THEN  
  61.                b_string := b_string || '圆';   
  62.             END IF;   
  63.   
  64.             IF len = i   
  65.             THEN  
  66.                b_string := b_string || '整';   
  67.             END IF;   
  68.   
  69.             z_count := 0;   
  70.          ELSE  
  71.             IF z_count = 0   
  72.             THEN  
  73.                b_string := b_string || '零';   
  74.                is_zero := TRUE;   
  75.             END IF;   
  76.   
  77.             z_count := z_count + 1;   
  78.          END IF;   
  79.       ELSE  
  80.          b_string :=   
  81.                b_string   
  82.             || SUBSTR (n_string,   
  83.                        TO_NUMBER (n),   
  84.                        1   
  85.                       )   
  86.             || SUBSTR (m_string,   
  87.                        len - i + 1,   
  88.                        1   
  89.                       );   
  90.          z_count := 0;   
  91.          is_zero := FALSE;   
  92.       END IF;   
  93.    END LOOP;   
  94.   
  95.    b_string := l_sign || b_string;   
  96.    RETURN b_string;   
  97. EXCEPTION   
  98.    WHEN OTHERS   
  99.    THEN  
  100.       RETURN (SQLERRM);   
  101. END;  
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值