使用Navicat 建立mysql儲存過程,實現日期加流水號序列
阿新 • • 發佈:2018-11-17
目的:使用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資料為‘201811600005’,
8、呼叫儲存過程,如下圖: