mysql 自动生成编号函数

根据需求,保存表数据时需要自动生成一个编号,格式如: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)

原文地址:https://www.cnblogs.com/greennnnnnnn/p/12604724.html

时间: 2024-07-28 13:13:14

mysql 自动生成编号函数的相关文章

#mySQL# 自动生成编号

CREATE TABLE TABLE_1(ID INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,// ID列为无符号整型,该列值不可以为空,并不可以重复,而且自增. NAME VARCHAR(5) NOT NULL)AUTO_INCREMENT = 100;(ID列从100开始自增) PRIMAPY是主键的意思,表示定义的该列值在表中是唯一的意思,不可以有重复. UNSIGNED是无符号的意思,代表该字段没有正负. AUTO_INCREMENT可

Effective C++ 之 Item 6 : 若不想使用编译器自动生成的函数,就该明确拒绝

Effective C++ chapter 2. 构造 / 析构 / 赋值运算 (Constructors, Destructors, and Assignment Operators) Item 6. 若不想使用编译器自动生成的函数,就该明确拒绝 (Explicitly disallow the use of compiler-generated functions you do not want) 地产中介商卖的是房子,一个中介软件系统自然而然想必有个 class 用来描述待售房屋: cla

Effective C++ Item 6 若不想使用编译器自动生成的函数,就该明确拒绝

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 为驳回编译器自动提供的机能,可将相应的成员函数声明为private并且不予实现.使用像Uncopyable这样的base class也是一种方法 classUncopyable{ protected: //允许derived对象构造和析构 Uncopyable(){} ~Uncopyable(){} private: Uncopyable(constUncopyable&); //但阻止c

框架-页面获取自动生成编号

页面获取自动生成编号方法        List<DataParam> parpams = new List<DataParam>();        parpams.Add(new DataParam("Code", "KT"));        parpams.Add(new DataParam("Count", "1"));        DbService.Instance().ExecuteF

【Effective c++】条款6:若不想使用编译器自动生成的函数就应该明确拒绝

地产中介卖的是房子,其使用的中介软件系统应该有个类用来描述卖掉的房子 class HomeFoeSale { ......} 但是任何房子都是独一无二的,不应该存在两个房子拥有同样的属性,因此以下操作不应该正确! HomeForSale h; HomeForSale h1(h); //调用复制构造函数 HomeForSale h2 = h; //调用赋值操作符 阻止这两个操作(复制.赋值)可以不声明它们,but自己不声明,编译器会自动生成,并且访问权限还是public.没办法只好声明出来,但是如

Effetive C++_笔记_条款06_若不想使用编译器自动生成的函数,就该明确拒绝

(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 通常如果你不希望class支持某一特定机能,只要不声明对应函数就是了.但这个策略对copy构造函数和copy assignment操作符却不起作用,你如果不声明它们,而某些人尝试调用它,编译器会为你声明它们. 这把你逼到了一个困境.如果你不声明copy构造函数和copy assignment操作符,编译器可能为你产出一份,于是你的clas支持copying.如果

hibernate+mysql 自动生成数据库问题

Hibernate Entity类 表名注解大写时,在windows下mysql自动生成的表都为小写(不区分大小写),在linux下mysql自动生成区分大小写.导致数据库问题. 原因(window下mysql不区分大小写,hibernate生成时全部生成小写,linux下生成时,按照注解大小写生成) 1 package com.pera.report.designer.data; 2 3 import java.sql.Clob; 4 5 import javax.persistence.Ba

Effective C++ 条款六 若不想使用编译器自动生成的函数,就该明确拒绝

class HomeForSale //防止别人拷贝方法一:将相应的成员函数声明为private并且不予实现 { public: private: HomeForSale(const HomeForSale&); HomeForSale& operator = (const HomeForSale&);//只有申明,此函数很少被使用   };   //方法二,设计一个专门用来阻止copying动作的基类,然后让其他类继承这个类即可   class Uncopyable { prot

【Java】Eclipse新建的Java文件自动生成主函数、控制台输出行数不再受限制

一.新建的Java文件自动生成主函数 虽然只是一个很简单的事情,但应该还是有人不知道了,每次新建Java文件都要手动输入public static void main(String args[]){},非常麻烦,其实Eclipse可以自动生成这行,只是大多数的Java文件都是没有主函数的,所以这行默认关闭, 右击Java项目下的src可以选择New->Class也就可以新建类 然后在弹出的对话框上勾上自动产生主函数,点击确认,在生产的Java文件中就有主函数了 二.Eclipse控制台输出行数不