mysql生成序列_mysql 自动生成编号函数

在MySQL中,为满足表数据保存时自动生成编号(如:AA-2020-03-31-0001)的需求,创建了一个自定义函数。首先建立sys_sequence_number表用于存储序列类型和值,接着定义getSequenceNo函数,该函数接受序列类型和长度作为参数,返回格式化的序列号。当无对应序列类型记录时,函数会插入新记录并设置初始值为0;否则,更新已有记录的值并返回新序列号。
摘要由CSDN通过智能技术生成

根据需求,保存表数据时需要自动生成一个编号,格式如:AA-2020-03-31-0001  (AA-yyyy-MM-dd-序号)。数据库用的mysql,所以创建一个mysql函数。

1、建表:

create table sys_sequence_number(

sequenceType varchar(30) not null,

val int not null,

len int not null

);

2、建函数

DELIMITER $$

DROP FUNCTION IF EXISTS getSequenceNo $$

create function getSequenceNo(pSequenceType varchar(30),pLen int) returns varchar(60)

begin

declare strZero varchar(20) default ‘00000000000000000000‘;

declare strSequenceNo varchar(60) default ‘‘;

declare iVal int default 0;

declare iLen int default 0;

declare c int default 0;

select count(1) into c from sys_sequence_number where sequenceType=pSequenceType;

if(c<1)

then

insert into sys_sequence_number(sequenceType,val,len)

values(pSequenceType,0,pLen);

end if;

update sys_sequence_number set val=val+1 where sequenceType=pSequenceType;

select val,len into iVal,iLen from sys_sequence_number where sequenceType=pSequenceType;

set strSequenceNo=concat(substr(strZero,1,iLen-length(iVal)),convert(iVal,char(10)));

return concat(concat(pSequenceType,‘-‘),strSequenceNo);

end $$

DELIMITER ;

3、在mysql上执行测试: select  getSequenceNo(concat(‘AA-‘,date_format(now(), ‘%Y-%m-%d‘)),4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值