|
- 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 ;
复制代码 |
|