单据编号生成SQL
不同时间段的几个项目都有单据编号的需求,如果底层用的数据存储,则此方案的集成及使用非常方便,特意整理并分享出来。
创建编号定义表 ticket_type
DROP TABLE IF EXISTS `ticket_type`; CREATE TABLE `ticket_type` ( `TT_CODE` varchar(8) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '类型编号', `TT_NAME` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '类型名称', `SHORT_CODE` varchar(5) COLLATE utf8mb4_bin DEFAULT NULL, `DATE_FORMAT` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL, `FLOW_NO` int(11) DEFAULT NULL, `FLOW_NO_LEN` int(255) DEFAULT NULL, PRIMARY KEY (`TT_CODE`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='票据类型';
测试数据
TT_CODE |
TT_NAME |
SHORT_CODE |
DATE_FORMAT |
FLOW_NO |
FLOW_NO_LEN |
01 |
生产入库单 |
RK |
%Y%m%d |
1 |
3 |
02 |
销售出库单 |
XX |
%Y%m%d |
1 |
3 |
03 |
退货入库单 |
TR |
%Y%m%d |
1 |
3 |
创建存储过程:
DROP FUNCTION IF EXISTS GetBillNo; CREATE FUNCTION GetBillNo (ticketCode varchar(8)) RETURNS varchar(50) BEGIN UPDATE ticket_type set FLOW_NO = FLOW_NO + 1 where TT_CODE = ticketCode; return (select concat(short_code, date_format(now(),`DATE_FORMAT`) , LPAD( right( concat('0000000000000000000000',cast(FLOW_NO as char)),FLOW_NO_LEN),FLOW_NO_LEN,'0')) from ticket_type where tt_code = ticketCode) ; END;
使用方法
select GetBillNo('01')
验证结果
标签:CODE,varchar,NO,DEFAULT,SQL,FLOW,utf8mb4,单据,编号 From: https://www.cnblogs.com/moonwebmast/p/16982507.html