深圳全飞鸿

标题: mysqlest发布函数STR_ADD_INT [打印本页]

作者: zhgc    时间: 2019-11-10 20:45
标题: mysqlest发布函数STR_ADD_INT
  1. DELIMITER $

  2. DROP FUNCTION IF EXISTS `syant`.`STR_ADD_INT`$

  3. CREATE DEFINER=`root`@`%` FUNCTION `STR_ADD_INT`(
  4. P_start VARCHAR(50),
  5. P_add  int,
  6. p_format VARCHAR(50)
  7. ) RETURNS varchar(25) CHARSET utf8
  8.     DETERMINISTIC
  9. BEGIN
  10.    /*
  11.     该函数用于字符串加十进制数字,返回字符串
  12.    */
  13.         DECLARE l_div INT;  -- 被除数
  14.         DECLARE L_FORMAT VARCHAR(50);
  15.         DECLARE L_FORMAT_LEN INT;
  16.         DECLARE l_mod VARCHAR(1); -- 模值-字符
  17.         DECLARE l_imod int;        -- 模值-数字
  18.         DECLARE l_idata int;
  19.         DECLARE l_istep int;  
  20.         DECLARE l_ij  int; -- 进位
  21.         DECLARE l_str VARCHAR(25);
  22.         DECLARE l_char varchar(1);
  23.    
  24.    
  25.         SET L_FORMAT=P_FORMAT;
  26.         SET L_FORMAT_LEN=LENGTH(L_FORMAT);
  27.         IF(P_add<0 OR L_FORMAT_LEN<8 OR L_FORMAT IS NULL )THEN
  28.                 RETURN "";
  29.         END IF;
  30.         IF(P_add=0)THEN
  31.                 RETURN P_start;
  32.         END IF;
  33.         IF(P_add>10000000)THEN  -- 防呆
  34.                 RETURN P_start;
  35.         END IF;
  36.       
  37.         SET l_istep=length(p_start);
  38.         SET l_str='';
  39.         SET l_div=P_add;
  40.         WHILE l_div > 0 DO
  41.                 -- 获得被加数
  42.                 if(l_istep>0)then
  43.                         set l_char:=SUBSTR(p_start,l_istep,1);
  44.                         SET l_idata:=INSTR(L_FORMAT,l_char)-1;
  45.                         if(l_idata<0)then
  46.                                 set l_idata=0;
  47.                         end if;
  48.                 else
  49.                         set l_idata=0;
  50.                 end if;
  51.                 -- 获得加数
  52.                 SET l_imod:=MOD(l_div, L_FORMAT_LEN) ;
  53.                 -- 获得进位
  54.                 set l_ij:=0;
  55.                 set l_imod:=l_imod+l_idata;
  56.                 if(l_imod>=l_format_len)then       
  57.                         set  l_ij:=1;
  58.                         set l_imod:=MOD(l_imod, L_FORMAT_LEN);
  59.                 end if;
  60.           
  61.                 -- 获得数字对应的字母
  62.                 SET l_mod:=SUBSTR(L_FORMAT, l_imod + 1, 1);
  63.                 SET l_str:=CONCAT(l_mod,l_str);
  64.                 SET l_div=TRUNCATE(l_div/L_FORMAT_LEN,0) + l_ij;
  65.                 SET l_istep:=l_istep-1;
  66.         END WHILE;
  67.         -- 继续,可能有前辍
  68.         if(l_istep>0)then
  69.           SET l_str:=CONCAT(substr(p_start,1,l_istep),l_str);
  70.         end if;
  71.     RETURN l_str;

  72. END$

  73. DELIMITER ;
复制代码





欢迎光临 深圳全飞鸿 (http://www.nagomes.com/disc/) Powered by Discuz! X3.2