MySql生成流水号

基础规则表Rul_Sequence:

规则表中的数据:

辅助存储过程:

CREATE DEFINER=`root`@`%` PROCEDURE `proc_getseqence`(IN `SeqCode` VARCHAR(60), OUT `ReturnNum` VARCHAR(40), OUT `MessageCode` VARCHAR(800))
    COMMENT ‘获取序列号‘
BEGIN
declare SeqNowNumStr VARCHAR(20);
declare SeqNowNum INT;
declare Nowyear CHAR(4);
declare Nowmonth CHAR(2);
declare Nowday CHAR(2);
declare NowLength INT;
declare DataFormat VARCHAR(50);
declare IniValue INT;
declare ResetType VARCHAR(10);
declare LastDate    CHAR(8);
declare WorkFLowStr VARCHAR(20);
declare DataNow CHAR(8);
declare i INT;

    /* 初始化变量 */
     SET MessageCode=‘999‘;
     SET ReturnNum = ‘0‘;
     SET NowLength=0;
     SET SeqNowNum =0;
     SET DataNow=DATE_FORMAT(NOW(),‘%Y%m%d‘);
     SET Nowyear=SUBSTRING(DataNow,1,4);
     SET Nowmonth =SUBSTRING(DataNow,5,2);
     SET Nowday =SUBSTRING(DataNow,7,2);
     Set i=1;

         Select   value_length,now_seqvalue,date_max,data_format,reset_Type,init_value
           into NowLength,SeqNowNum,LastDate,DataFormat,ResetType,IniValue
             From RUL_Sequence where seq_code=SeqCode;

      Update RUL_Sequence Set Is_Running=‘2‘ where Seq_Code=SeqCode and is_running=‘1‘;

If (ResetType=2 and DataNow<>LastDate  AND IniValue>0)
        OR (ResetType=3 and concat(nowyear,nowmonth)<>substr(LastDate,1,6) AND IniValue>0)
        OR (ResetType=4 and nowyear<>substr(LastDate,1,4) AND IniValue>0 ) then
           set SeqNowNum=IniValue;
 end if; 

set i=NowLength; -- i 此时表示流水号的总长度
set WorkFLowStr=‘<‘;
while NowLength>0 do
         set WorkFLowStr=concat(WorkFLowStr,‘X‘);
        set NowLength=NowLength-1;
     end while;
    set WorkFLowStr=concat(WorkFLowStr,‘>‘);
     /***********拼流水号格式 End*******/
    set SeqNowNumStr=concat(SeqNowNum,‘‘);
    set NowLength=i-length(SeqNowNumStr);
     /***********补零操作 Start*******/
     WHILE NowLength>0 do
         set SeqNowNumStr=concat(‘0‘,SeqNowNumStr);
         set NowLength=NowLength-1;
     end while;
     /***********补零操作 End*******/  

    set ReturnNum=REPLACE(DataFormat,‘<YYYY>‘,nowyear);            -- 把规则中<YYYY>替换成相应年
    set ReturnNum=REPLACE( ReturnNum,‘<MM>‘,nowmonth);                -- 把规则中<MM>替换成相应月
    set ReturnNum=REPLACE( ReturnNum,‘<DD>‘,nowday);                -- 把规则中<DD>替换成相应日
    set ReturnNum=REPLACE( ReturnNum,WorkFLowStr,SeqNowNumStr);-- 把规则中的形如<XXX>的替换成相应流水号,

     /***********更新当前流水值为最大流水号、上一个流水号生成时间和运行标记(运行标记置为"1"(没有运行) ) Start*******/

     UPDATE RUL_Sequence SET now_seqvalue=SeqNowNum+1,date_max=DataNow,is_running=‘1‘, edit_time=now()
     WHERE is_running=‘2‘ AND  seq_code=SeqCode;
     commit;
     /***********更新当前流水值为最大流水号、上一个流水号生成时间和运行标记(运行标记置为"1"(没有运行) ) End*******/

-- set MessageCode =concat(‘无此编号规则‘,MessageCode);
END
时间: 2024-11-13 09:01:55

MySql生成流水号的相关文章

mysql 生成流水号 存储过程 订单编号

用存储过程生成流水号是很常用的,这里以生成订单编号的流水号作为示例.(新的一天的流水号从1开始,如:今天的订单编号是CD2013010900014,下一个订单编号将是CD2013010900015:明天的订单编号将从CD2013011000001开始) 生成规则:    2位前缀+年月日+5位流水号     或者 2位前缀+年月日时分+5位流水号     或者 2位前缀+年月日时分秒+5位流水号. 测试订单表(test_orders): 1 CREATE TABLE `test_orders`

highcharts实例教程一:结合php与mysql生成折线图

Highcharts是一款纯javascript和html5编写的图表库,不仅几乎能兼容所有pc浏览器,而且对ios和android手机端的兼容 性也不错,它能够很简单便捷的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.折线图.面积图.柱状图.饼图.散点图 等多达28种不同类型的图表,还支持3D立体图表的生成,可以满足你对Web图表的任何需求 !而且Highcharts对学习者.非商业机构是免费使用的. 案例场景:要求针对技术cto网站,直观地显示一周网站pv.

Python+Mysql生成zabbix统计数据

先大概了解一下zabbix数据库结构: 1.groups表 可以根据组名查到组ID 2.找到组ID就可以根据组ID找出这个组下面的所有服务器的ID,这个关系在hosts_groups表里面: 3.有了hostid就可以在hosts表里查看这台机器的基本信息了: items表则可以根据hostid查出这台服务器的所有监控项: 4.终于在items表查到itemid,利用这个itemid在trends和trends_uint这两个表中统计出我们需要的数据 我python水平挺菜的,很多面向对象的功能

java中生成流水号的一个例子(使用关系型数据库)

在实际的开发中,可能会有根据一定的规则生成流水号的需求(比如根据根据公司编码和日期生成4位流水号)我们可以把公司和日期联合起来作为一个业务编码,把这个业务编码和序列的值存储到数据库中,每次需要生成流水号的时候根据公司和日期联合起来生成的这个业务编码去数据库里边去查,若有记录的话就把记录的话就把对应的序列值返回,然后序列的值加一,若根据对应的业务编码查询不到相应的记录就把流水号对应的最小的值返回,然后在数据库中插入相应的记录 这种场景使用类似BerkeleyDB这种K,Value对数据库来实现是最

SQL Server 存储过程生成流水号

SQL Server利用存储过程生成流水号 USE BiddingConfig SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO -- ============================================= -- Author: 小爽 -- Create date: 2017-05-25 -- Description: 业务数据KEY生成 -- 构成规则: [区域编号][应用系统编号][版本编号][功能编号][日期戳][流水记录号]

Python+Mysql生成zabbix统计数据(优化)

周末重新整理了一下,把有些不合理的地方改了下,自我感觉好多了 ZabbixReport.py #!/usr/bin/python #coding:utf-8 import MySQLdb import time,datetime #zabbix数据库信息: zdbhost = '192.168.1.100' zdbuser = 'zabbix' zdbpass = 'zabbixreport' zdbport = 3306 zdbname = 'zabbix' #生成文件名称: xlsfilen

java中生成流水号的一个例子(使用BerkeleyDB)

package com.jiaoyiping.berkeleydb; import com.sleepycat.je.*; import com.sleepycat.utilint.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.UnsupportedEncodingException; /** * Created with IntelliJ IDEA. * User: 焦一

highcharts实例教程二:结合php与mysql生成饼图

上回我们分析了用highcharts结合php和mysql生成折线图的实例,这次我们以技术cto网站搜索引擎流量为例利用highcharts生成饼图. 饼图通常用在我们需要直观地显示各个部分所占的比例的时候,比如我们需要统计各大搜索引擎来的流量比例. 第一步:创建数据库保存各搜索引擎流量的pv数 CREATE TABLE `pie` (   `id` int(10) NOT NULL AUTO_INCREMENT,   `title` varchar(30) NOT NULL,   `pv` i

Oracle生成流水号函数

1:日期范围上 smalldatetime的有效时间范围1900/1/1~2079/6/6 datetime的有效时间范围1753/1/1~9999/12/31 2:精准度上 smalldatetime只精准到分,而datetime则可精准到3位的毫秒. 3:存储空间上 smalldatetime占用4个字节,前2个字节存储base date(1900年1月1日)之后的天数.后2个字节存储午夜后的分钟数. datetime占用8个字节,前4个字节存储base date(即1900年1月1日)之前