深圳全飞鸿
标题:
mysqlist发布函数STR_MINUS_STR
[打印本页]
作者:
zhgc
时间:
2019-11-10 20:43
标题:
mysqlist发布函数STR_MINUS_STR
DELIMITER $
DROP FUNCTION IF EXISTS `syant`.`STR_MINUS_STR`$
CREATE DEFINER=`root`@`%` FUNCTION `STR_MINUS_STR`(
P_start VARCHAR(50),
p_end varchar(50),
p_format VARCHAR(50)
) RETURNS int(11)
DETERMINISTIC
BEGIN
/*
该函数用于两个进制字符串相减,返回十进制结果
如果两个数字相差悬殊,可能会影响数据库,
故,不建议用该函数,建议用STR_ADD_INT;
*/
DECLARE L_FORMAT VARCHAR(50);
DECLARE L_FORMAT_LEN INT;
DECLARE l_len INT;
DECLARE l_res INT;
DECLARE L_POS INT;
DECLARE L_COUNT INT;
DECLARE L_STR VARCHAR(1);
DECLARE L_STR2 VARCHAR(1);
DECLARE L_INT INT;
DECLARE L_INT2 INT;
SET L_FORMAT=P_FORMAT;
SET L_FORMAT_LEN=LENGTH(L_FORMAT);
IF(L_FORMAT_LEN<1 OR L_FORMAT IS NULL )THEN
RETURN -1;
END IF;
if(length(p_start)<>length(p_end))then
return -1;
end if;
if(p_start=p_end)then
return 1;
end if;
SET l_res=0;
SET L_POS=0;
SET l_len=IFNULL(LENGTH(P_start),0);
SET L_STR='';
SET L_STR2='';
WHILE l_len > L_POS AND L_STR=L_STR2 DO
SET L_POS=L_POS+1;
SET L_STR=SUBSTR(P_start,l_pos,1);
SET L_STR2=SUBSTR(P_end,l_pos,1);
END WHILE;
-- 防呆
if(L_Len-L_POS>4)then
return -2;
end if;
SET L_INT=str_to_INT(SUBSTR(P_START,L_POS),L_FORMAT);
SET L_INT2=STR_TO_INT(SUBSTR(P_END,L_POS),L_FORMAT);
RETURN L_INT2 - L_INT;
END$
DELIMITER ;
复制代码
欢迎光临 深圳全飞鸿 (http://www.nagomes.com/disc/)
Powered by Discuz! X3.2