使用Navicat 创建mysql存储过程,实现日期加流水号序列

参考文章:https://blog.csdn.net/dengsilinming/article/details/8488626


目的:使用Navicat 创建mysql存储过程,实现格式为8位日期(年月日)+5位流水号序列。


步骤:

1、打开Navicat 登录数据库,点击导航栏上的函数,如下图:


2、点击新建函数,选择“过程”,如下图:


3、添加输出参数,如下图:


4、存储过程代码如下:

BEGIN    
  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数据为‘2018042600009’,

8、调用存储过程,如下图:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值