DELIMITER $$
USE `ppd-sit`$$
DROP PROCEDURE IF EXISTS `createOrderNo`$$
CREATE DEFINER=`root`@`%` PROCEDURE `createOrderNo`(OUT `newOrderNo` CHAR(15))
BEGIN
DECLARE currentDate CHAR (8) ;-- 定义currentDate为当前日期,格式为:年+月+日
DECLARE maxNo INT DEFAULT 0 ; -- 定义maxNo为离现在最近的满足条件的订单编号的流水号最后5位,如:2018042600002的maxNo=2
DECLARE oldOrderNo CHAR (15) DEFAULT '' ;-- 定义oldOrderNo为离现在最近的订单编号,默认为空
DECLARE newOrderNo CHAR (15) DEFAULT '' ;-- 定义newOrderNo为新生成的订单编号,默认为空
SELECT DATE_FORMAT(NOW(), '%Y%m%d') INTO currentDate ;-- 当前日期 订单编号形式:年月日+流水号,如:2018042600002
/* 从test_orders表中查出最新一条记录赋值给oldOrderNo */
SELECT IFNULL(order_no, '') INTO oldOrderNo -- IFNULL(expr1,expr2),接收两个参数,如果不是NULL,则返回第一个,如果是NULL,返回第二个
FROM course_order
WHERE TO_DAYS(create_time) = TO_DAYS(NOW())
ORDER BY id DESC LIMIT 1 ; -- 有多条时只显示离现在最近的一条
IF oldOrderNo != '' THEN
SET maxNo = CONVERT(SUBSTRING(oldOrderNo, -5), DECIMAL) ;-- SUBSTRING(oldOrderNo, -5):订单编号如果不为‘‘截取订单的最后5位
END IF ;
SELECT
CONCAT('OD',currentDate, LPAD((maxNo + 1), 5, '0')) INTO newOrderNo ; -- LPAD((maxNo + 1), 5, '0'):如果不足5位,将用0填充左边
SELECT newOrderNo;
END$$
DELIMITER ;
存储过程生成订单号
最新推荐文章于 2021-04-10 04:35:02 发布