mysql 生成编号_mySQL生成用户编码

系统中经常有一些编码需要生成,以下是生成编码的设计。

下面OPC,DB,EB生成编码的时候要求不带4。

通过调用函数的方式如:SELECT f_getmaxid(1)就可以得到对应的编码。

表设计:

15da00cbdd37a89012fff551b9b1910e.png

CREATE TABLE `t_sys_maxid` (

`tagid` int(8) NOT NULL COMMENT '识别号',

`maxno` int(11) NOT NULL COMMENT '最大号',

`idlen` tinyint(4) NOT NULL COMMENT '最大号',

`idpre` varchar(4) NOT NULL COMMENT '前缀',

`isid` char(1) NOT NULL COMMENT '是否是字符ID',

PRIMARY KEY (`tagid`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8

调用函数:

DELIMITER $$

USE `weipansettlementdb0420`$$

DROP FUNCTION IF EXISTS `f_getmaxid`$$

CREATE DEFINER=`weipan_jy`@`%` FUNCTION `f_getmaxid`(p_tagid TINYINT) RETURNS VARCHAR(10) CHARSET utf8

MODIFIES SQL DATA

BEGIN

DECLARE v_idlen TINYINT; #总长度

DECLARE v_isid CHAR(1); #是否是ID

DECLARE v_i INT DEFAULT 1; #循环变量

DECLARE v_j INT DEFAULT 1; #循环变量

DECLARE v_num INT DEFAULT 1;#排除4的变量

DECLARE v_numlen INT;#排除4变量的长度

DECLARE v_index INT;#4出现的位置

DECLARE v_zerocnt INT; #加零数量

DECLARE v_id VARCHAR(10); #返回的ID;

DECLARE v_idpre VARCHAR(4);#前缀

UPDATE t_sys_maxid SET maxno=1+@mno:=maxno,isid=@isid:=isid

WHERE tagid=p_tagid;

SELECT idpre INTO v_idpre

FROM t_sys_maxid WHERE tagid=p_tagid;

IF (v_idpre='OPC' OR v_idpre='DB' OR v_idpre='EB') THEN

SET v_numlen=LENGTH(CONVERT(@mno+1,CHAR(10)));

SET v_index=LOCATE('4', CONVERT(@mno+1,CHAR(10)));

IF v_index > 0 THEN

SET v_index=v_numlen-v_index;

IF v_index > 0 THEN

WHILE v_j<=v_index DO

SET v_num=v_num*10;

SET v_j=v_j+1;

END WHILE;

END IF;

UPDATE t_sys_maxid SET maxno=maxno+v_num

WHERE tagid=p_tagid;

END IF;

END IF;

IF @isid='Y' THEN

SELECT idpre,idlen,isid INTO v_id,v_idlen,v_isid

FROM t_sys_maxid

WHERE tagid=p_tagid;

SET v_zerocnt=v_idlen-LENGTH(CONCAT(CONVERT(@mno,CHAR(10)),v_id));

WHILE v_i<=v_zerocnt DO

SET v_id=CONCAT(v_id,'0');

SET v_i=v_i+1;

END WHILE;

SET v_id=CONCAT(v_id,TRIM(CONVERT(@mno,CHAR(10))));

ELSE

SET v_id=TRIM(CONVERT(@mno,CHAR(10)));

END IF;

RETURN v_id;

END$$

DELIMITER ;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值