實現效果:shhp201806080002
字首編碼--prefixstr 'shhp'
字尾編碼長度-- suffixcodelength 長度4 (0002)
日期字元-- 20180608
先準備一張表 express_code
需要乙個字段 product_code
create procedure `generate_code`(in prefixstr varchar(10), in suffixcodelength int(10), out newcode varchar(50))
begin
declare currentdate varchar(14);
-- 當前日期字串
declare suffixcode int default 0;
-- 字尾編碼
declare oldcode varchar(30) default '';
-- 上乙個編碼
select date_format(now(), '%y%m%d') into currentdate ;
-- 格式化日期,如'20180608'
select ifnull(product_code, '') into oldcode
from express_info
where substring(product_code, 1, length(currentdate) + length(prefixstr)) = concat(prefixstr,currentdate)
and length(product_code) = length(prefixstr) + length(currentdate) + suffixcodelength
order by product_code desc limit 1 ;
-- 查詢上乙個code
if oldcode != ''
then
set suffixcode = convert(substring(oldcode, -suffixcodelength), decimal) ;
end if ;
-- 字尾編碼轉換為數字,如果前面有0005,則去除前面的0
select concat(prefixstr, currentdate, lpad((suffixcode + 1), suffixcodelength, '0')) into newcode ;
-- 字尾編碼加1,並進行拼接
select newcode ;
end複製**
只有乙個輸出引數時:
"getexpresscode" resulttype="string" statementtype="callable">
call generate_productcode(?)
string getexpresscode();
// service
public string getexpresscode
() 帶輸入、輸出引數時
// 引數封裝到實體類
@data
public class coderule
"getexpresscode" resulttype="string" parametertype="com.peng.express.entity.coderule" statementtype="callable">
call generate_code(
#,#,#
)string getexpresscode(coderule coderule);
public string getexpresscode
()
複製**
mysql 生成流水號 儲存過程 訂單編號
用儲存過程生成流水號是很常用的,這裡以生成訂單編號的流水號作為示例。新的一天的流水號從1開始,如 今天的訂單編號是cd20130109 00014,下乙個訂單編號將是cd20130109 00015 明天的訂單編號將從cd20130110 00001開始 生成規則 2位字首 年月日 5位流水號 或者...
MySQL獲取流水號儲存過程
通過事務機制,可保證流水號的更新和讀取的完整性。delimiter 獲取流水號 drop procedure if exists get sid create procedure get sid para domain varchar 20 out para sid bigint unsigned ...
訂單事務 儲存過程
create proc createorder orderid nvarchar 50 訂單號 userid int,使用者編號 address nvarchar 255 收貨人位址 totalmoney money output 總金額 as begin declare error int set...