DB2实现数字(12位)人民币小写转大写自定义函数实现


CREATE OR REPLACE FUNCTION "DBUSER1"."NUM_TO_CHINESE" 
(P_NUM NUMERIC(16,2))
RETURNS VARCHAR(255)
LANGUAGE SQL
SPECIFIC SQL230307145232260
BEGIN
        DECLARE RESULT      VARCHAR(800); 
        DECLARE NUM_LEFT    VARCHAR(10); --小数点左边的数字
        DECLARE NUM_RIGHT   VARCHAR(20); --小数点右边的数字
        DECLARE NUM_RIGHT1  VARCHAR(20); --小数点右边的数字
        DECLARE STR1        VARCHAR(100) DEFAULT '零壹贰叁肆伍陆柒捌玖'; --数字大写
        DECLARE STR2        VARCHAR(100) DEFAULT '元拾佰仟万拾佰仟亿'; --数字位数(从低至高)
        DECLARE STR3        VARCHAR(100) DEFAULT '角分'; --数字位数(从低至高)
        DECLARE NUM_PRE     INT DEFAULT 1; --前一位上的数字
        DECLARE NUM_CURRENT INT; --当前位上的数字
        DECLARE NUM_COUNT   INT DEFAULT 0; --当前数字位数
        DECLARE NUM_COUNT1   INT DEFAULT 0; --当前数字位数
        DECLARE NUM         VARCHAR(100); 
        DECLARE CH          VARCHAR(100); 
        DECLARE QCH         VARCHAR(100);
        DECLARE SIGN        BOOLEAN DEFAULT FALSE;
        DECLARE SIGN1        BOOLEAN DEFAULT FALSE; 
        --DECLARE NUM_ROUND   VARCHAR(100); --转换数字为小数点后2位的字符(正数)
       
        IF P_NUM IS NULL THEN
            RETURN NULL;
        END IF; --转换数字为null时返回null
               
        SET RESULT = '';
        SET NUM = to_char(P_NUM);
        
        IF length(NUM)> 12 THEN   --数字做多为12位
            RETURN NULL;
        END IF; 
        
        SET NUM_LEFT = SUBSTR(NUM,length(NUM)-1); --小数点左边的数字
        SET NUM_RIGHT = SUBSTR(NUM,1,length(NUM)-3); --小数点右边的数字
        SET NUM_RIGHT1 = NUM_RIGHT;
        
        --小数点右边处理
        while NUM_RIGHT != 0 DO
        
                SET NUM_CURRENT = MOD(NUM_RIGHT,10); --当前数字 
                
                IF  NUM_PRE = 0 AND  NUM_CURRENT = 0 THEN               
                     
                ELSE                                                                      
                        IF NUM_CURRENT !=0 THEN --判断当前数是否为零                       
                                IF NUM_COUNT > 3 AND SIGN = FALSE  THEN
                                        SET RESULT = '万'|| RESULT;
                                        SET SIGN = TRUE;                                       
                                END IF;
                                
                                SET CH = SUBSTR(STR1, 1 + 2 * NUM_CURRENT, 2);--获取大写数字
                                
                                IF NUM_COUNT = 4 THEN                                                                   
                                        SET RESULT = CH || RESULT;
                                ELSE
                                        
                                        SET QCH = SUBSTR(STR2, 1 + 2 * NUM_COUNT, 2); --获取单位
                                        SET RESULT = CH ||QCH || RESULT;
                                END IF;
                                
                                                                                                
                        ELSE
                                IF NUM_COUNT = 0 THEN --当前元素为第一位
                                       SET RESULT = '元' || RESULT;                                                                                                                                                                                                                                                                                                        
                                ELSE   
                                       IF  NUM_COUNT = 4 THEN
                                                
                                       ELSE
                                                SET CH = SUBSTR(STR1, 1 + 2 * NUM_CURRENT, 2);--获取大写数字                     
                                                SET RESULT = CH || RESULT;
                                       END IF;                               
                                        
                                END IF;                                                                                                                                                                                             
                                                              
                        END IF;                                                                                                                                                                                                                                                  
                END IF; 
                                  
                SET NUM_RIGHT = FLOOR(NUM_RIGHT / 10); 
                SET NUM_COUNT = NUM_COUNT + 1; --当前位位数 
                SET NUM_PRE = NUM_CURRENT;  --前一位余数 
        END WHILE;
        
        --小数点左边处理
        IF NUM_LEFT = '00' THEN
                SET RESULT = RESULT || '整';
        ELSE
                 
                IF substr(NUM_LEFT,1,1)='0' THEN 
                        SET RESULT = RESULT;
                ELSE
                        SET RESULT = RESULT|| substr(STR1,1 + 2 * substr(NUM_LEFT,1,1),2) ||'角';
                END IF;
                
                IF substr(NUM_LEFT,2,1)='0' THEN 
                        
                ELSE
                        SET RESULT = RESULT|| substr(STR1,1 + 2 * substr(NUM_LEFT,2,1),2)||'分';
                END IF ;
                                
        END IF;                    
        RETURN result;  
END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值