使用Navicat 创建mysql存储过程,实现日期加流水号序列
时间:2021-07-01 10:21:17
帮助过:31人阅读
DECLARE currentDate
CHAR (
13) ;
-- 定义currentDate为当前日期,格式为:年+月+日
DECLARE maxNo
INT DEFAULT 0 ;
-- 定义maxNo为离现在最近的满足条件的订单编号的流水号最后5位,如:2018042600002的maxNo=2
DECLARE oldOrderNo
CHAR (
13)
DEFAULT ‘‘ ;
-- 定义oldOrderNo为离现在最近的订单编号,默认为空
DECLARE newOrderNo
CHAR (
13)
DEFAULT ‘‘ ;
-- 定义newOrderNo为新生成的订单编号,默认为空
SELECT DATE_FORMAT(NOW(),
‘%Y%m%d‘)
INTO currentDate ;
-- 当前日期 订单编号形式:年月日+流水号,如:2018042600002
/* 从test_orders表中查出最新一条记录赋值给oldOrderNo */
SELECT IFNULL(orderNo,
‘‘)
INTO oldOrderNo
-- IFNULL(expr1,expr2),接收两个参数,如果不是NULL,则返回第一个,如果是NULL,返回第二个
FROM test_orders
WHERE SUBSTRING(orderNo,
1,
8)
= currentDate
ORDER BY id
DESC LIMIT
1 ;
-- 有多条时只显示离现在最近的一条
IF oldOrderNo
!= ‘‘ THEN
SET maxNo
= CONVERT(
SUBSTRING(oldOrderNo,
-5),
DECIMAL) ;
-- SUBSTRING(oldOrderNo, -5):订单编号如果不为‘‘截取订单的最后5位
END IF ;
SELECT
CONCAT(currentDate, LPAD((maxNo + 1),
5,
‘0‘))
INTO newOrderNo ;
-- LPAD((maxNo + 1), 5, ‘0‘):如果不足5位,将用0填充左边
SELECT newOrderNo;
END
5、修改参数数据类型长度,默认没有,可能会报错,这里固定为8位日期+5位流水号,
6、保存存储过程名,orderNo,
7、新建测试数据库,test_orders,添加数据,目前我的表里面最新的orderNo数据为‘201811600005’,
8、调用存储过程,如下图:
使用Navicat 创建mysql存储过程,实现日期加流水号序列
标签:into _for img 测试数据 技术分享 new 添加 打开 png