深圳全飞鸿
标题:
mysqlest发布函数STR_ADD_INT
[打印本页]
作者:
zhgc
时间:
2019-11-10 20:45
标题:
mysqlest发布函数STR_ADD_INT
DELIMITER $
DROP FUNCTION IF EXISTS `syant`.`STR_ADD_INT`$
CREATE DEFINER=`root`@`%` FUNCTION `STR_ADD_INT`(
P_start VARCHAR(50),
P_add int,
p_format VARCHAR(50)
) RETURNS varchar(25) CHARSET utf8
DETERMINISTIC
BEGIN
/*
该函数用于字符串加十进制数字,返回字符串
*/
DECLARE l_div INT; -- 被除数
DECLARE L_FORMAT VARCHAR(50);
DECLARE L_FORMAT_LEN INT;
DECLARE l_mod VARCHAR(1); -- 模值-字符
DECLARE l_imod int; -- 模值-数字
DECLARE l_idata int;
DECLARE l_istep int;
DECLARE l_ij int; -- 进位
DECLARE l_str VARCHAR(25);
DECLARE l_char varchar(1);
SET L_FORMAT=P_FORMAT;
SET L_FORMAT_LEN=LENGTH(L_FORMAT);
IF(P_add<0 OR L_FORMAT_LEN<8 OR L_FORMAT IS NULL )THEN
RETURN "";
END IF;
IF(P_add=0)THEN
RETURN P_start;
END IF;
IF(P_add>10000000)THEN -- 防呆
RETURN P_start;
END IF;
SET l_istep=length(p_start);
SET l_str='';
SET l_div=P_add;
WHILE l_div > 0 DO
-- 获得被加数
if(l_istep>0)then
set l_char:=SUBSTR(p_start,l_istep,1);
SET l_idata:=INSTR(L_FORMAT,l_char)-1;
if(l_idata<0)then
set l_idata=0;
end if;
else
set l_idata=0;
end if;
-- 获得加数
SET l_imod:=MOD(l_div, L_FORMAT_LEN) ;
-- 获得进位
set l_ij:=0;
set l_imod:=l_imod+l_idata;
if(l_imod>=l_format_len)then
set l_ij:=1;
set l_imod:=MOD(l_imod, L_FORMAT_LEN);
end if;
-- 获得数字对应的字母
SET l_mod:=SUBSTR(L_FORMAT, l_imod + 1, 1);
SET l_str:=CONCAT(l_mod,l_str);
SET l_div=TRUNCATE(l_div/L_FORMAT_LEN,0) + l_ij;
SET l_istep:=l_istep-1;
END WHILE;
-- 继续,可能有前辍
if(l_istep>0)then
SET l_str:=CONCAT(substr(p_start,1,l_istep),l_str);
end if;
RETURN l_str;
END$
DELIMITER ;
复制代码
欢迎光临 深圳全飞鸿 (http://www.nagomes.com/disc/)
Powered by Discuz! X3.2