首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

请问一个SQL把数字金额转为大写金额的方法或者解决方法

2013-09-26 
请教一个SQL把数字金额转为大写金额的方法或者解决办法网上找了都是大堆大堆的牛掰代码,自己用又报错不知

请教一个SQL把数字金额转为大写金额的方法或者解决办法
网上找了都是大堆大堆的牛掰代码,自己用又报错不知道错在哪里,提示方法无效!

在线等...已经找了两个小时,头疼
[解决办法]

引用:
解决了,回帖一个可以结贴了


CREATE OR REPLACE FUNCTION money_to_chinese (money IN VARCHAR2)
   RETURN VARCHAR2
IS
   c_money    VARCHAR2 (12);
   m_string   VARCHAR2 (60) := '分角圆拾佰仟万拾佰仟亿';
   n_string   VARCHAR2 (40) := '壹贰叁肆伍陆柒捌玖';
   b_string   VARCHAR2 (80);
   n          CHAR;
   len        NUMBER (3);
   i          NUMBER (3);
   tmp        NUMBER (12);
   is_zero    BOOLEAN;
   z_count    NUMBER (3);
   l_money    NUMBER;
   l_sign     VARCHAR2 (10);
BEGIN
   l_money := ABS (money);

   IF money < 0
   THEN
      l_sign := '负';
   ELSE
      l_sign := '';
   END IF;

   tmp := ROUND (l_money, 2) * 100;
   c_money := RTRIM (LTRIM (TO_CHAR (tmp, '999999999999')));
   len := LENGTH (c_money);
   is_zero := TRUE;
   z_count := 0;
   i := 0;

   WHILE i < len
   LOOP
      i := i + 1;
      n := SUBSTR (c_money,
                   i,
                   1


                  );

      IF n = '0'
      THEN
         IF len - i = 6 OR len - i = 2 OR len = i
         THEN
            IF is_zero
            THEN
               b_string := SUBSTR (b_string,
                                   1,
                                   LENGTH (b_string) - 1
                                  );
               is_zero := FALSE;
            END IF;

            IF len - i = 6
            THEN
               b_string := b_string 
[解决办法]
 '万';
            END IF;

            IF len - i = 2
            THEN
               b_string := b_string 
[解决办法]
 '圆';
            END IF;

            IF len = i
            THEN
               b_string := b_string 


[解决办法]
 '整';
            END IF;

            z_count := 0;
         ELSE
            IF z_count = 0
            THEN
               b_string := b_string 
[解决办法]
 '零';
               is_zero := TRUE;
            END IF;

            z_count := z_count + 1;
         END IF;
      ELSE
         b_string :=
               b_string
            
[解决办法]
 SUBSTR (n_string,
                       TO_NUMBER (n),
                       1
                      )
            
[解决办法]
 SUBSTR (m_string,
                       len - i + 1,
                       1
                      );
         z_count := 0;
         is_zero := FALSE;
      END IF;
   END LOOP;

   b_string := l_sign 


[解决办法]
 b_string;
   RETURN b_string;
EXCEPTION
   WHEN OTHERS
   THEN
      RETURN (SQLERRM);
END;
 


[解决办法]
来蹭分请问一个SQL把数字金额转为大写金额的方法或者解决方法
[解决办法]
引用:
Quote: 引用:

解决了,回帖一个可以结贴了


CREATE OR REPLACE FUNCTION money_to_chinese (money IN VARCHAR2)
   RETURN VARCHAR2
IS
   c_money    VARCHAR2 (12);
   m_string   VARCHAR2 (60) := '分角圆拾佰仟万拾佰仟亿';
   n_string   VARCHAR2 (40) := '壹贰叁肆伍陆柒捌玖';
   b_string   VARCHAR2 (80);
   n          CHAR;
   len        NUMBER (3);
   i          NUMBER (3);
   tmp        NUMBER (12);
   is_zero    BOOLEAN;
   z_count    NUMBER (3);
   l_money    NUMBER;
   l_sign     VARCHAR2 (10);
BEGIN
   l_money := ABS (money);

   IF money < 0
   THEN
      l_sign := '负';
   ELSE
      l_sign := '';
   END IF;

   tmp := ROUND (l_money, 2) * 100;
   c_money := RTRIM (LTRIM (TO_CHAR (tmp, '999999999999')));
   len := LENGTH (c_money);
   is_zero := TRUE;
   z_count := 0;
   i := 0;

   WHILE i < len
   LOOP
      i := i + 1;
      n := SUBSTR (c_money,
                   i,


                   1
                  );

      IF n = '0'
      THEN
         IF len - i = 6 OR len - i = 2 OR len = i
         THEN
            IF is_zero
            THEN
               b_string := SUBSTR (b_string,
                                   1,
                                   LENGTH (b_string) - 1
                                  );
               is_zero := FALSE;
            END IF;

            IF len - i = 6
            THEN
               b_string := b_string 
[解决办法]
 '万';
            END IF;

            IF len - i = 2
            THEN
               b_string := b_string 
[解决办法]
 '圆';
            END IF;

            IF len = i
            THEN


               b_string := b_string 
[解决办法]
 '整';
            END IF;

            z_count := 0;
         ELSE
            IF z_count = 0
            THEN
               b_string := b_string 
[解决办法]
 '零';
               is_zero := TRUE;
            END IF;

            z_count := z_count + 1;
         END IF;
      ELSE
         b_string :=
               b_string
            
[解决办法]
 SUBSTR (n_string,
                       TO_NUMBER (n),
                       1
                      )
            
[解决办法]
 SUBSTR (m_string,
                       len - i + 1,
                       1
                      );
         z_count := 0;
         is_zero := FALSE;


      END IF;
   END LOOP;

   b_string := l_sign 
[解决办法]
 b_string;
   RETURN b_string;
EXCEPTION
   WHEN OTHERS
   THEN
      RETURN (SQLERRM);
END;
 



你这段代码明显有问题,输入3432400011.232,得到结果:叁肆亿叁仟贰佰肆拾万零壹拾壹圆贰角叁分

正确结果应该是:参拾肆亿参仟贰佰肆拾万零壹拾壹元贰角参分

给你个正确的代码,看帖子3#:
http://www.itpub.net/240281.html

热点排行