深圳全飞鸿

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 578|回复: 0
打印 上一主题 下一主题

mysqlist发布函数STR_MINUS_STR

[复制链接]

800

主题

1379

帖子

7705

积分

版主

Rank: 7Rank: 7Rank: 7

积分
7705
跳转到指定楼层
楼主
发表于 2019-11-10 20:43:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. DELIMITER $

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

  3. CREATE DEFINER=`root`@`%` FUNCTION `STR_MINUS_STR`(
  4. P_start VARCHAR(50),
  5. p_end varchar(50),
  6. p_format VARCHAR(50)
  7. ) RETURNS int(11)
  8.     DETERMINISTIC
  9. BEGIN
  10.    /*
  11.     该函数用于两个进制字符串相减,返回十进制结果
  12.     如果两个数字相差悬殊,可能会影响数据库,
  13.         故,不建议用该函数,建议用STR_ADD_INT;
  14.    */
  15.     DECLARE L_FORMAT VARCHAR(50);
  16.     DECLARE L_FORMAT_LEN INT;
  17.     DECLARE l_len INT;
  18.     DECLARE l_res INT;
  19.     DECLARE L_POS INT;
  20.     DECLARE L_COUNT INT;
  21.     DECLARE L_STR VARCHAR(1);
  22.     DECLARE L_STR2 VARCHAR(1);
  23.     DECLARE L_INT INT;
  24.     DECLARE L_INT2 INT;
  25.    
  26.     SET L_FORMAT=P_FORMAT;
  27.     SET L_FORMAT_LEN=LENGTH(L_FORMAT);
  28.     IF(L_FORMAT_LEN<1 OR L_FORMAT IS NULL )THEN
  29.       RETURN -1;
  30.     END IF;
  31.     if(length(p_start)<>length(p_end))then
  32.         return -1;
  33.     end if;
  34.     if(p_start=p_end)then
  35.       return 1;
  36.     end if;
  37.    
  38.     SET l_res=0;
  39.     SET L_POS=0;
  40.     SET l_len=IFNULL(LENGTH(P_start),0);
  41.     SET L_STR='';
  42.     SET L_STR2='';
  43.     WHILE l_len > L_POS AND L_STR=L_STR2 DO
  44.            SET L_POS=L_POS+1;
  45.            SET L_STR=SUBSTR(P_start,l_pos,1);
  46.            SET L_STR2=SUBSTR(P_end,l_pos,1);
  47.     END WHILE;
  48.     -- 防呆
  49.     if(L_Len-L_POS>4)then
  50.         return -2;
  51.     end if;
  52.     SET L_INT=str_to_INT(SUBSTR(P_START,L_POS),L_FORMAT);
  53.         SET L_INT2=STR_TO_INT(SUBSTR(P_END,L_POS),L_FORMAT);
  54.       
  55.     RETURN L_INT2 - L_INT;
  56.    
  57. END$

  58. DELIMITER ;
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|nagomes  

GMT+8, 2025-5-5 05:14 , Processed in 0.021103 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表