有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

MySql中包含年和月的java自动增量

我有一张桌子叫>;具有项目估算投标编号自动递增字段的项目,名为Project_ID

此字段是自动递增的。我将其创建为一个8位字符的字段,其中包含字段规则

我需要它自动递增为两个数字年,两个数字月,包括一个连字符,然后是一个从001开始的数字,用于该时间段的第一个记录

An example for the month of April 2012 would be 1204-001 for the first record, 1204-002 for the 2nd and etc. then when the month of May rolls around the Project_ID would change to 1205-001.

我一直试图写的如下,我把它作为一个简单的默认表达式,默认值为

Cyear(date()) + (month()) + “-“ + “001” . 

我是如何做到这一点的


共 (3) 个答案

  1. # 1 楼答案

    INSERT INTO (Project_ID, col1, col2, col3)
    SELECT DATE_FORMAT(NOW(), CONCAT('%y%m-', 
        ((  SELECT RIGHT(CONCAT('000', (RIGHT(Project_ID, 3) + 1)), 3) AS number
            FROM table_name
            WHERE LEFT(Project_ID, 5) = DATE_FORMAT(NOW(), '%y%m-'))
            ORDER BY Project_ID DESC
            UNION
        (   SELECT '001')
            LIMIT 1))),
    'Col1 data', 'Col2 data', 'Col3 data'
    

    这个可能看起来有点奇怪,所以我只解释一下流程:

    我使用INSERT INTO ... SELECT,以便检查table_name中的现有数据,查看是否已经存在任何现有案例。该WHERE将发现现有病例,多亏了RIGHTLEFT这两种方法,不难找出所需的相关数据。如果没有找到行,则使用'001',然后只需分配现有列,如图所示

  2. # 2 楼答案

    我已经完全解决了,看一看

    首先,您必须获取一个示例表,其中的列将与原始表中的列相同,但列project_id除外

    然后首先在原始表中插入一行,其中列project_id=0的值和其他列为null,只需像这样手动插入第一行

    然后在示例表上创建一个触发器,如下所示

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    分隔符

    try上插入后创建触发器t

    每行

    开始

    声明v int

    声明c int

    设置v=(从original中选择max(project_id

    如果(v=0),则

    插入到original集中

    project_id=concat((选择concat(右(子字符串索引((选择*自(选择curdate()自try限制1)作为a),'-','1'),2),右(子字符串索引((选择*自(选择curdate()自try限制1)作为a),'-','2'))从try限制1),'-001')

    project=新的project

    否则

    设置c=(从original中选择右(project_id)作为x,从original限制1中选择3)

    插入到original集中

    project_id=concat((从trylimit 1中选择*子字符串索引((从trylimit 1中选择*作为a),'-','1'),2),右(从trylimit 1中选择*子字符串索引((从trylimit 1中选择*作为a),'-','2'),2))从trylimit 1),concat('-00',c+1,1))

    project=新的project

    original中删除限制1

    如果结束

    完;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    在上面的触发器中,我的示例表是tryproject文本),原始表是originalproject_id文本,project文本)

    在示例表上创建类似这样的触发器后,开始在示例表中插入行,这些行将自动插入原始表中的project_id列中的自动增量值,如。。1405-001,1405-002,1405-003.... 其中14201405May,其余为使用触发器递增的自动递增值

    只要遵循以上步骤,你的问题一定会得到解决

  3. # 3 楼答案

    基本上,您可以在希望列递增的表上使用INSERTTRIGGER之前使用

    以下是创建简单算法并将此代码放入触发器的一些步骤:

    // get current YEAR
    SET @cur_Year = CONCAT(DATE_FORMAT(CURDATE(), '%Y'));
    // get current MONTH
    SET @cur_MONTH = CONCAT(DATE_FORMAT(CURDATE(), '%m'));
    // concatenate YEAR and MONTH
    SET @Year_Month = CONCAT(@cur_Year, @cur_MONTH);
    // get the last value for the current YEAR and MONTH
    SET @max_ID = ( SELECT MAX(ID) 
                    FROM    tableName 
                    WHERE   ID LIKE CONCAT(@Year_Month, '-%'));
    // get the last three characters from the id, convert in to
    // integer and increment by 1
    SET @last_ID = CAST(RIGHT(@max_ID, 3) AS SIGNED) + 1;
    // pad zero on the left using LPAD and 
    // concatenate it with YEAR and MONTH
    SET @new_ID =   CONCAT(@Year_Month,'-',LPAD(CAST(@last_ID AS CHAR(3)), 3, '0'));