MySQL函数生成【日期+补零+自增数】的数据编号

您所在的位置:网站首页 mysql自动生成创建时间 MySQL函数生成【日期+补零+自增数】的数据编号

MySQL函数生成【日期+补零+自增数】的数据编号

2023-09-09 12:24| 来源: 网络整理| 查看: 265

首先应该创建一个自增号码的表,建表数据如下: CREATE TABLE `sequence` ( `name` varchar(20) NOT NULL, `value` int(10) unsigned NOT NULL, PRIMARY KEY (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=''自增编号生成本表'';

其中两个字段的含义: name:代表的自增的业务名称,需要生成编号的可能是 order_number(订单编号)或者是goods_number(产品编号); value:记录当前编号已经自增的值,从0开始,每次生成 +1。

表格详情如下: namevalueorder_number0goods_number0 开始创建MySQL函数 BEGIN DECLARE getval VARCHAR(24) DEFAULT ''''; UPDATE sequence SET value= last_insert_id(value+1) WHERE name=seq_name; SET getval = (SELECT CONCAT(IFNULL(DATE_FORMAT(NOW(), time_type),''''), LPAD((last_insert_id()+""), seq_length, ''0''))); RETURN getval; END

这是一个获取名称为getval()的MySQL函数,执行时首先修改sequence表中为‘seq_name’的value值,然后执行查询获取最终的编号。其中包括三个参数需要传入: seq_name:这个参数对应的就是sequence表中的name字段,表示要获取哪个业务对应的编号,可以传入例如 ‘order_number’; time_type:这个参数表示的是对应生成的时间格式,可以传入‘yyyy-MM-dd’; seq_length:这个参数指的是在时间后还有几位,比如可以传入4,那么时间后就会生成‘0001’四位,按介绍参数传入参数执行函数,那么最后生成的编号为【202001140001】

项目中应该如何使用该函数(以Mybatis为例) //Mybatis对应Mapper的Java代码写下方法: String getWorksheetId(@Param("name") String name, @Param("sqlLength") Integer sqlLength, @Param("typeTime") String typeTime); SELECT getWorksheetId(#{name}, #{sqlLength}, #{typeTime}) FROM dual

dual:指的是MySQL的虚拟表,没有什么特殊意义,具体解释可以百度搜下,这里就不详细介绍了。

最后在Java代码中调用该方法就可以实现了: String orderNumber = SequenceMapper.getWorksheetId("order_number", 4, "yyyy-MM"); 最终返回的结果为(时间为文章创建日期,不必纠结):“202001140001”。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3